У меня есть 2 групповых запроса, каждый подсчитывает строки для каждого compnay_id, оба сгруппированы по company_id. мне нужно вывести один запрос, который будет печатать столбец qty1, qty2, объединение company_id не работает для меня:

select count(*) as qty1
from T_MISSION
where datepart(month, [mdatetime])=12
group by  company_id

union all

select count(*) as qty2
from T_CUSTSK
where datepart(month, [sdate])=12
group by  company_id
sql
0
Alexxx 18 Мар 2017 в 14:42

2 ответа

Лучший ответ

Простое решение будет:

select sum(qty1), sum(qty2), company_id
from
(
 select count(*) as qty1, 0 as qty2, company_id
 from T_MISSION
 where datepart(month, [mdatetime])=12
 group by  company_id

 union all

 select 0 as qty1, count(*) as qty2, company_id
 from T_CUSTSK
 where datepart(month, [sdate])=12
 group by  company_id
) as combined
group by company_id

Идея: использовать отдельный столбец для каждого значения. Установите для всех остальных столбцов значение 0 для каждого сбора данных, чтобы они не смешивались странным образом. Наконец, суммируйте их все (по каждому клиенту), чтобы было ровно одно значение для каждого столбца и клиента, как и все остальные 0 по определению.

Этот маленький трюк позволяет смешивать не связанные между собой данные.

0
RuDevel 18 Мар 2017 в 13:16

Я не специалист по SQL, но сработает ли LEFT JOIN? https://www.w3schools.com/sql/sql_join_left.asp

0
Praveen Premaratne 18 Мар 2017 в 11:46