我正在尝试合并在同一数据库的两个不同表上运行的两个单独查询的结果。
表 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 文件(.xml))。
一种方法使用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)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句