我正在尝试合并在同一数据库的两个不同表上运行的两个独立查询的结果。
表1是以下查询的结果:
SELECT db1.table1.AAA AS Col1, SUM(db1.table1.BBB) AS Col2
FROM db1.table1
WHERE cond1 AND cond2
GROUP BY db1.table1.AAA
ORDER BY db1.table1.AAA
结果:
Col 1 Col2
ABC 1200
BFK 5405
KVR 1254
LRE 9851
(The list goes on)
表2是对另一个表的另一个查询的结果:
SELECT SUM(db1.table2.CCC), SUM(db1.table2.DDD)
FROM db1.table2
WHERE cond3
结果:
CCC DDD
1325 5428
我想要做的是获取一个表,将第二个结果添加到另一个表中,进行转置,如下所示:
Col 1 Col2
ABC 1200
BFK 5405
KVR 1254
LRE 9851
CCC 1325
DDD 5428
我一直在尝试使用UNION,PIVOT,INSERT等,但毫无疑问,我对如何/应该如何使用尚无明确的看法。
当前,我一个接一个地运行两个查询,然后手动将来自query2的这4条数据插入到query1的结果中。
有没有一种更“优雅”的方式,一个SQL查询将返回相同的结果?
我正在 MS Server Management Studio 中进行这项工作-并且还在同事编写的一个小工具中进行测试(该工具处理其中包含SQL代码的xml文件(。
答案 0 :(得分:2)
一种方法使用UNION ALL
:
SELECT t1.AAA AS Col1, SUM(t1.BBB) AS Col2
FROM db1.table1 t1
WHERE cond1 AND cond2
GROUP BY db1.table1.AAA
UNION ALL
SELECT 'CCC', SUM(t2.CCC)
FROM db1.table2 t2
WHERE cond3
UNION ALL
SELECT 'DDD', SUM(t2.DDD)
FROM db1.table2 t2
WHERE cond3;
在SQL Server中,您也可以将其表示为:
SELECT t1.AAA AS Col1, SUM(t1.BBB) AS Col2
FROM db1.table1 t1
WHERE cond1 AND cond2
GROUP BY db1.table1.AAA
UNION ALL
SELECT v.col1, v.sumcol
FROM (SELECT SUM(t2.CCC) as ccc, SUM(t2.DDD) as ddd
FROM db1.table2 t2
WHERE cond3
) t2 CROSS APPLY
(VALUES ('CCC', t2.ccc), ('DDD', t2.ddd)) v(col1, sumcol)
答案 1 :(得分:0)
您可以使用两个联合,并将列的名称插入select中:
SELECT
db1.table1.AAA AS Col1,
SUM(db1.table1.BBB) AS Col2
FROM
db1.table1
WHERE
cond1 AND cond2
GROUP BY
db1.table1.AAA
ORDER BY
db1.table1.AAA
UNION
SELECT
'CCC',
SUM(db1.table2.CCC)
FROM
db1.table2
WHERE
cond3
UNION
SELECT
'DDD',
SUM(db1.table2.DDD)
FROM
db1.table2
WHERE
cond3