Как показать 2 запроса с 'group by' как один в SQL Server - PullRequest
0 голосов
/ 29 декабря 2018

Я пытаюсь объединить результаты двух запросов с двумя равными столбцами (запросы имеют 2 Group by).

Я пробовал с Union и Join утверждениями, но недать желаемый результат, или я использовал их неправильно

Запрос № 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

enter image description here

Запрос № 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

enter image description here

Мне нужно что-то вроде этого:

enter image description here

гдеCOD_RCA и COD_MATERIAL - это отношение между запросом № 1 и запросом № 2.

Спасибо

Ответы [ 3 ]

0 голосов
/ 29 декабря 2018

Если я не ошибаюсь, ваши два запроса могут быть в значительной степени разложены, так как они очень близки один к другому.Вам просто нужен 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
0 голосов
/ 29 декабря 2018

попробуйте это (но лучшее решение - решение Лукаша Шозды):

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 
0 голосов
/ 29 декабря 2018

Вы можете использовать условное агрегирование:

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;
...