You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server中如何正确合并多个SQL标量查询的结果?

SQL Server 合并多个单行单列标量查询结果的方法

针对将多个返回单值的查询结果合并到同一个结果集的需求,在SQL Server下有几种常用实现,可根据业务场景选择:

按列合并(你提到的更优方案)

你当前的写法可以正常运行,但存在冗余问题:外层的FROM [table]完全不需要,一旦这张表是空表,整个查询会直接返回空结果,不会返回Res1、Res2的结构。
去掉外层表依赖的最简写法如下,不需要依赖任何基表就能正常返回结果,没有匹配数据时对应列会返回NULL:

SELECT
    (SELECT TOP 1 [col1] FROM [table] WHERE con1 = 1 ORDER BY [col1] DESC) AS Res1,
    (SELECT TOP 1 [col1] FROM [table] WHERE con2 = 1 ORDER BY [col1] DESC) AS Res2

如果所有子查询都是查同一张表,还可以用条件聚合优化性能,只需要扫一次表就能拿到所有结果,数据量大时比多次子查询效率高很多:

SELECT
    MAX(CASE WHEN con1 = 1 THEN [col1] END) AS Res1,
    MAX(CASE WHEN con2 = 1 THEN [col1] END) AS Res2
FROM [table]

说明:因为需求是取符合条件的col1降序第一行,也就是分组下的最大值,用MAX聚合刚好匹配需求,如果是取升序第一行换成MIN即可。

按行合并

如果不需要横向列对齐,也可以按行返回结果,用UNION ALL拼接每个查询即可,注意每个带ORDER BY的TOP查询需要包成子查询,避免语法报错:

SELECT ResultName, ResultValue
FROM (
    SELECT TOP 1 'Res1' AS ResultName, [col1] AS ResultValue 
    FROM [table] WHERE con1 = 1 ORDER BY [col1] DESC
) t1
UNION ALL
SELECT ResultName, ResultValue
FROM (
    SELECT TOP 1 'Res2' AS ResultName, [col1] AS ResultValue 
    FROM [table] WHERE con2 = 1 ORDER BY [col1] DESC
) t2

这种写法扩展很方便,后续要加新的查询结果,直接新增一个UNION ALL分支就行,不需要修改已有列结构。

单字符串拼接

如果只需要拿到合并后的文本结果,直接用CONCAT拼接所有标量结果即可:

SELECT
    CONCAT(
        'Res1:', (SELECT TOP 1 [col1] FROM [table] WHERE con1 = 1 ORDER BY [col1] DESC),
        ' | Res2:', (SELECT TOP 1 [col1] FROM [table] WHERE con2 = 1 ORDER BY [col1] DESC)
    ) AS MergedResult

提示:SQL Server中判断bit类型字段不要写= true,T-SQL没有布尔值的字面量写法,bit类型字段直接写= 1(真)或= 0(假)即可。

内容的提问来源于stack exchange,提问作者user17611369

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 01:21:34