Я создаю SQL-запрос для бизнес-отчета. Мне нужно иметь как промежуточные итоги (сгруппированные по номеру файла), так и итоговые суммы в отчете.Как добавить итоги/промежуточные итоги к набору результатов без группировки данных строк?
Я вхожу в неизвестную территорию SQL, так что это немного первая попытка. Я сделал запрос почти работает. Единственная проблема заключается в том, что записи группируются - мне они нужны в отчете.
Вот мой пример данных:
FileNumber Date Cost Charge 3 Dec 22/09 5 10 3 Jan 13/10 6 15 3B Mar 28/10 1 3 3B Mar 28/10 5 10
Когда я запускаю этот запрос
SELECT
CASE
WHEN (GROUPING(FileNumber) = 1) THEN NULL
ELSE FileNumber
END AS FileNumber,
CASE
WHEN (GROUPING(Date) = 1) THEN NULL
ELSE Date
END AS Date,
SUM(Cost) AS Cost,
SUM(Charge) AS Charge
FROM SubtotalTesting
GROUP BY FileNumber, Date WITH ROLLUP
ORDER BY
(CASE WHEN FileNumber IS NULL THEN 1 ELSE 0 END), -- Put NULLs after data
FileNumber,
(CASE WHEN Date IS NULL THEN 1 ELSE 0 END), -- Put NULLs after data
Date
я получаю следующее:
FileNumber Date Cost Charge 3 Dec 22/09 5 10 3 Jan 13/10 6 15 3 NULL 11 25 3B Mar 28/10 6 13 <-- 3B NULL 6 13 NULL NULL 17 38
Что я хочу является:
FileNumber Date Cost Charge 3 Dec 22/09 5 10 3 Jan 13/10 6 15 3 NULL 11 25 3B Mar 28/10 1 3 <-- 3B Mar 28/10 5 10 <-- 3B NULL 6 13 NULL NULL 17 38
Я могу ясно видеть почему записи сгруппированы, но я понятия не имею, как их разделить, все еще возвращая промежуточные итоги и общую сумму.
Я немного зелёный, когда речь заходит о расширенных SQL-запросах, например, если я ошибаюсь в решении проблемы с помощью WITH ROLLUP
, пожалуйста, предложите некоторые предпочтительные альтернативы - вам не нужно напишите весь запрос для меня, мне просто нужно какое-то направление. Благодаря!
(Stupid me.) Я просто пытался это использовать с помощью 'UNION ALL' в исходной таблице с помощью' SELECT ... SUM (Cost) ... '- ваше решение более эффективно? –
@JonS: 'UNION' потребует два прохода, так что да, это решение более эффективно. – Quassnoi
Это сработало отлично! Большое спасибо. –