Суммирование данных по нескольким столбцам - PullRequest
1 голос
/ 30 июня 2009

Мой босс просит, чтобы я закодировал отчет, который имеет следующие компоненты:

  • Круговая диаграмма количества сотрудников по штатам
  • Круговая диаграмма количества сотрудников по возрастным группам (10 лет)
  • Круговая диаграмма стажа работы сотрудника (скобки на 5 лет)
  • Круговая диаграмма работника мужского / женского пола
  • Круговая диаграмма количества сотрудников по диапазону окладов (компьютер выводит скобки).

Могут быть и другие.

Я знаю, что могу сделать это, написав 5 разных операторов SQL. Однако, похоже, что для одного отчета будет сгенерировано 5 сканирований таблицы.

Я мог бы переключать передачи и выполнять одно сканирование таблицы и анализировать каждую запись на входном конце и счетчиках приращений и, вероятно, выполнить это за один проход.

Какой путь пойдет коллективная мудрость в стеке потока?

Есть ли способ сделать это с помощью предложений CUBE или ROLL UP в T-SQL?

Ответы [ 3 ]

2 голосов
/ 30 июня 2009

Если ваши данные правильно проиндексированы, эти отчеты могут вообще не требовать сканирования таблицы.

Действительно, для такой проблемы вы должны простым способом кодировать отчеты, а затем посмотреть, соответствует ли производительность бизнес-требованиям. Если нет, , тогда посмотрите на стратегии оптимизации.

2 голосов
/ 30 июня 2009

если вам нужно 5 круговых диаграмм и вам нужно подвести итоги, тогда вам нужно 5 операторов SQL, поскольку ваше предложение WHERE отличается для каждого

1 голос
/ 30 июня 2009

Вы можете добиться некоторого прироста производительности, сохранив промежуточные результаты в табличной переменной или временной таблице, а затем выполнив с ней больше агрегации. Пример только с двумя наборами результатов:

SELECT COUNT(*) as cnt, State, AgeBracket 
INTO #t
FROM YourTable
GROUP BY State, AgeBracket;

SELECT SUM(cnt) AS cnt, State FROM #t GROUP BY State;
SELECT SUM(cnt) AS cnt, AgeBracket FROM #t GROUP BY AgeBracket;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...