将两个不相关的查询结果合并到单个表中-怎么做?

时间:2019-04-08 09:54:23

标签: sql

我正在尝试合并在同一数据库的两个不同表上运行的两个独立查询的结果。

表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文件(。

2 个答案:

答案 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
相关问题