Доброго дня,Неуверенные, как сделать несколько вложенного ЗЕЬЕСТ при использовании GROUP BY
В настоящее время я функционирующий код, который работает для определения количества открытых заказов на выполнении работ и количества закрытых заказов на выполнении работ в течение определенного периода времени. Теперь я хочу добавить количество рабочих заказов, которые были открыты до этого периода времени; У меня есть код, который дает результаты, которые я хочу, но у меня возникают трудности с выяснением того, как бы я сделал свой оператор select, встроенный в исходный код, поэтому мне не нужно назначать статическую дату. Будет легче показать вам, что у меня есть и что я ожидаю получить.
SELECT o.dateinfo
,opened
,closed
FROM (
SELECT MONTH(org_date) + (YEAR(org_date) * 100) AS dateinfo
,COUNT(wo) AS opened
FROM wkaw
WHERE org_date >= DATEFROMPARTS(YEAR(GETDATE()) - 1, MONTH(GETDATE()), 01)
GROUP BY MONTH(org_date) + (YEAR(org_date) * 100)
) o
INNER JOIN (
SELECT MONTH(cmpl_date) + (YEAR(cmpl_date) * 100) AS dateinfo
,COUNT(wo) AS closed
FROM wkaw
WHERE cmpl_date >= DATEFROMPARTS(YEAR(GETDATE()) - 1, MONTH(GETDATE()), 01)
AND cmpl_date IS NOT NULL
GROUP BY MONTH(cmpl_date) + (YEAR(cmpl_date) * 100)
) c ON o.dateinfo = c.dateinfo
ORDER BY o.dateinfo
Производит эти результаты в настоящее время
dateinfo | opened | closed
--------------------------------
201502 | 285 | 587
201503 | 519 | 345
201504 | 494 | 398
201505 | 415 | 430
201506 | 578 | 465
201507 | 409 | 646
201508 | 501 | 417
201509 | 430 | 347
201510 | 491 | 983
201511 | 657 | 455
201512 | 468 | 366
201601 | 723 | 1105
201602 | 54 | 60
Я тогда следующие выберите заявления, которые получают информацию я хотел бы для каждого из этих терминов, но они используют статические даты вместо автоматической генерации как Я сделал это выше.
SELECT COUNT(wo) FROM wkaw WHERE (cmpl_date >= DATEFROMPARTS(2015,02,01) OR cmpl_date IS NULL) AND org_date < DATEFROMPARTS(2015,02,01)
SELECT COUNT(*) FROM wkaw WHERE (cmpl_date >= DATEFROMPARTS(2015,03,01) OR cmpl_date IS NULL) AND org_date < DATEFROMPARTS(2015,03,01)
SELECT COUNT(*) FROM wkaw WHERE (cmpl_date >= DATEFROMPARTS(2015,04,01) OR cmpl_date IS NULL) AND org_date < DATEFROMPARTS(2015,04,01)
SELECT COUNT(*) FROM wkaw WHERE (cmpl_date >= DATEFROMPARTS(2015,05,01) OR cmpl_date IS NULL) AND org_date < DATEFROMPARTS(2015,05,01)
SELECT COUNT(*) FROM wkaw WHERE (cmpl_date >= DATEFROMPARTS(2015,06,01) OR cmpl_date IS NULL) AND org_date < DATEFROMPARTS(2015,06,01)
SELECT COUNT(*) FROM wkaw WHERE (cmpl_date >= DATEFROMPARTS(2015,07,01) OR cmpl_date IS NULL) AND org_date < DATEFROMPARTS(2015,07,01)
SELECT COUNT(*) FROM wkaw WHERE (cmpl_date >= DATEFROMPARTS(2015,08,01) OR cmpl_date IS NULL) AND org_date < DATEFROMPARTS(2015,08,01)
SELECT COUNT(*) FROM wkaw WHERE (cmpl_date >= DATEFROMPARTS(2015,09,01) OR cmpl_date IS NULL) AND org_date < DATEFROMPARTS(2015,09,01)
SELECT COUNT(*) FROM wkaw WHERE (cmpl_date >= DATEFROMPARTS(2015,10,01) OR cmpl_date IS NULL) AND org_date < DATEFROMPARTS(2015,10,01)
SELECT COUNT(*) FROM wkaw WHERE (cmpl_date >= DATEFROMPARTS(2015,11,01) OR cmpl_date IS NULL) AND org_date < DATEFROMPARTS(2015,11,01)
SELECT COUNT(*) FROM wkaw WHERE (cmpl_date >= DATEFROMPARTS(2015,12,01) OR cmpl_date IS NULL) AND org_date < DATEFROMPARTS(2015,12,01)
SELECT COUNT(*) FROM wkaw WHERE (cmpl_date >= DATEFROMPARTS(2016,01,01) OR cmpl_date IS NULL) AND org_date < DATEFROMPARTS(2016,01,01)
SELECT COUNT(*) FROM wkaw WHERE (cmpl_date >= DATEFROMPARTS(2016,02,01) OR cmpl_date IS NULL) AND org_date < DATEFROMPARTS(2016,02,01)
Результаты для тех, кто являются
1 | 2187
1 | 1885
1 | 2059
1 | 2155
1 | 2140
1 | 2253
1 | 2016
1 | 2100
1 | 2183
1 | 1691
1 | 1893
1 | 1995
1 | 1613
Эти цифры показывают, что я бы ожидать. Результаты, которые я хочу видеть, хотя это
dateinfo | open_wo_count | opened | closed
---------------------------------------------------
201502 | 2187 | 285 | 587
201503 | 1885 | 519 | 345
201504 | 2059 | 494 | 398
201505 | 2155 | 415 | 430
201506 | 2140 | 578 | 465
201507 | 2253 | 409 | 646
201508 | 2016 | 501 | 417
201509 | 2100 | 430 | 347
201510 | 2183 | 491 | 983
201511 | 1691 | 657 | 455
201512 | 1893 | 468 | 366
201601 | 1995 | 723 | 1105
201602 | 1613 | 54 | 60
Я пробовал разные способы, но все они производятся не-ожидаемые результаты, и я уверен, что это только потому, что я не знаю, как. Любая помощь будет оценена по достоинству.
Приветствия, Johnathan
Обновлено, спасибо! Просто плохая привычка к капитализации названий –
Я не уверен, что понимаю, но в прошлом я сделал скорый отчет о количестве заказов на работу и вам нужна таблица календаря (таблица, основной ключ которой - дата, охватывающая каждую возможную дату). Затем присоединитесь к соответствующим полям даты в ваших рабочих заказах и ответ выйдет. Может быть, лучше, если вы предоставите простой пример входных и выходных данных. –