如何在 SQL 服务器中将 'group by' 的 2 个查询显示为一个

How to show 2 queries with 'group by' as one in SQL Server

我正在尝试将两个查询的结果与两个相等的列合并(查询有 2 Group by)。

我已经尝试使用 UnionJoin 语句,但没有给出想要的结果,或者我用错了它们

查询 #1:

SELECT 
    COD_RCA, COD_MATERIAL, SUM(TM_SALIDA) AS INCLUIR
FROM 
    BASE_MESES
WHERE  
    PONDERADA = 'INCLUIR' AND ANO = '2017' AND MES = 'DEZ' 
GROUP BY 
    COD_RCA, COD_MATERIAL

查询#2:

SELECT 
    COD_RCA, COD_MATERIAL, SUM(REAL_TM) AS TOTAL
FROM 
    BASE_MESES
WHERE 
    ANO = '2017' AND MES = 'DEZ' 
GROUP BY 
    COD_RCA, COD_MATERIAL

我需要这样的东西:

其中 COD_RCACOD_MATERIAL 是查询 #1 和查询 #2 之间的关系。

谢谢

您可以使用条件聚合:

SELECT COD_RCA,COD_MATERIAL
    ,SUM(IIF( PONDERADA='INCLUIR',TM_SALIDA,0)) AS INCLUIR
    ,SUM(REAL_TM) AS TOTAL
FROM BASE_MESES
WHERE ANO ='2017' AND MES='DEZ' 
GROUP BY COD_RCA, COD_MATERIAL;

如果我没记错的话,您的两个查询可以在很大程度上分解,因为其中一个查询与另一个查询非常接近。您只需要一个 CASE 来计算 « INCLUIR » 结果列。

SELECT 
    COD_RCA,
    COD_MATERIAL,
    SUM(CASE 
        WHEN PONDERADA='INCLUIR' THEN TM_SALID ELSE 0 END
    ) AS INCLUIR,
    SUM(REAL_TM) AS TOTAL
FROM BASE_MESES
WHERE 
    ANO ='2017' 
    AND MES='DEZ' 
GROUP BY 
    COD_RCA, 
    COD_MATERIAL

试试这个(但最好的解决方案是 Lukasz Szozda 的解决方案):

With quer1 as 
(
SELECT COD_RCA, COD_MATERIAL,SUM(TM_SALIDA) AS INCLUIR
FROM BASE_MESES
WHERE  PONDERADA='INCLUIR' AND ANO ='2017' AND MES='DEZ' 
GROUP BY COD_RCA, COD_MATERIAL
),
Query2 as (
SELECT COD_RCA, COD_MATERIAL,SUM(REAL_TM) AS TOTAL
FROM BASE_MESES
WHERE ANO ='2017' AND MES='DEZ' 
GROUP BY COD_RCA, COD_MATERIAL
)
select isnull(f1.COD_RCA, f2.COD_RCA) COD_RCA, 
isnull(f1.COD_MATERIAL, f2.COD_MATERIAL) COD_MATERIAL, 
f1.INCLUIR, f2.TOTAL 
from quer1 f1 
full outer join Query2 f2 on f1.COD_RCA=f2.COD_RCA and f1.COD_MATERIAL=f2.COD_MATERIAL