Допустим, у меня есть таблица с именем census
со следующей информацией:
COUNTRY PROVINCE CITY POPULATION
==============================================
USA California Sacramento 1234
USA California SanFran 4321
USA Texas Houston 1111
USA Texas Dallas 2222
Canada Ontario Ottawa 3333
Canada Manitoba Winnipeg 4444
Я строю отчет на уровне страны/провинции, который дает мне следующее:
SELECT country, province, SUM(population)
FROM census
GROUP BY country, province;
COUNTRY PROVINCE SUM(POPULATION)
=======================================
USA California 5555
USA Texas 3333
Canada Ontario 3333
Canada Manitoba 4444
Я хочу включить в отчет строку "общее резюме", чтобы окончательный результат выглядел так:
COUNTRY PROVINCE SUM(POPULATION)
=======================================
USA California 5555
USA Texas 3333
Canada Ontario 3333
Canada Manitoba 4444
TOTAL 16665
Я знаком с ROLLUP
s, но не могу найти комбинацию, которая даст мне то, что я ищу. Использование GROUP BY ROLLUP(country, province)
включает в себя общее значение, которое я хочу, но также включает большое количество дополнительных значений, которые мне не нужны. Это также относится и к GROUP BY ROLLUP(country), province
Как я могу сделать "общую" запись?
В настоящее время я вычисляю ее с помощью UNION ALL
и повторяю 90% первого запроса с другим GROUP BY
, но поскольку первый запрос нетривиален, результат медленный и уродливый код.
Вот скрипт SQL для тех, кто хочет поиграть с этим: http://sqlfiddle.com/#!4/12ad9/5
GROUP BY
и использует специальный синтаксис SQL Server. - person Mr. Llama   schedule 10.09.2014