Я пытаюсь написать запрос SQL, который создает таблицу со сводными значениями для каждого года и месяца.
У меня есть таблица, которая выглядит примерно так:
TABLENAME: TIME
id cID cDate cTime
1 254 2019-10-11 5
2 259 2019-10-13 4
3 268 2020-01-17 6
4 268 2020-01-18 9
5 271 2020-01-21 4
6 267 2020-02-19 8
И еще одна таблица, которая выглядит так:
TABLENAME: CASE
id name invoice status
254 Acme Yes finish
259 Tex NoFakt finish
268 Rex C Yes *Null*
267 Hydro *Null* open
271 Corp Yes finish
Я хочу получить запрос, который возвращает сумму за каждый месяц, например:
Year Month RegTime Invoiced ToBeInvoiced
2019 10 5 5 0
2019 11 0 0 0
2019 12 0 0 0
2020 1 19 4 15
2020 2 8 0 8
Объяснение выходных данных:
Год и месяц очевидны
RegTime должен быть суммой всех TIME.cTime, ГДЕ CASE.invoice <> 'NoFakt'
Выставленный счет должен быть суммой всех TIME. cTIME WHERE CASE.invoice = 'Yes' AND CASE.status = 'fini sh'
ToBeInvoiced должно быть суммой всех TIME.cTIME, ГДЕ CASE.invoice = 'Yes' И CASE.status <> 'fini sh'
Я пробовал этот запрос, но с этим мне нужно l oop предопределенное значение года и месяца в моем программном коде вместо того, чтобы просто иметь оператор sql, который выполняет вся работа. Должен быть более простой способ, чем этот ...
select (select sum(cTIME) from TIME inner join CASE on TIME.cID = CASE.id WHERE CASE.invoice <> 'NoFakt' AND DATEPART(yy, cDate) = '2019' AND DATEPART(mm, cDate) = '10') AS RegTime,
(select sum(cTIME) from TIME inner join CASE on TIME.cID = CASE.id WHERE CASE.invoice = 'Yes' AND CASE.status = 'finish' AND DATEPART(yy, cDate) = '2019' AND DATEPART(mm, cDate) = '10') AS Invoiced,
(select sum(cTIME) from TIME inner join CASE on TIME.cID = CASE.id WHERE CASE.invoice = 'Yes' AND CASE.status <> 'finish' AND DATEPART(yy, cDate) = '2019' AND DATEPART(mm, cDate) = '10') AS ToBeInvoiced