2009-06-29 6 views
1

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

  • круговая диаграмма графа сотрудников государственными
  • круговая диаграмма графа кадров в разбивке по возрастной группе (10 год скобки)
  • круговая диаграмма длины работника службы (5 год скобки)
  • круговая диаграмма сотрудника мужчина/женщина пробое
  • круговая диаграмма графа сотрудников по диапазонам заработной платы (компьютер генерирует Brack ГЭ).

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

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

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

В какой форме коллективная мудрость в stackoverflow будет продолжаться?

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

ответ

2

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

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

+0

Я уступаю ваш второй момент. Однако я призываю вас придумать схему индекса, которая позволяет мне получать статистику по «Age of Employee Age» в 10-летних диапазонах, что позволит избежать сканирования таблицы. – Aheho

+1

@Aheho, чтобы подвести итог вам нужно сканировать, если вы делаете мужчина/женщина, тогда индекс тоже бесполезен из-за очень низкой избирательности – SQLMenace

2

если вы хотите 5 круговых диаграмм и нужны подвести итог, то вам необходимо 5 заявлений SQL, так как ваш ИНЕКЕ отличается для каждого

+0

Неверно. Я мог бы вытащить все соответствующие записи на передний план, а затем построить статистику в цикле foreach(). – Aheho

+0

Я говорю о чистом SQL, в вашем случае вам придется группировать все различные критерии и возвращать количество строк? – SQLMenace

+0

В настоящее время самый большой отчет должен был бы окупить 30K-40K строк. – Aheho

1

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

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; 
+0

Эй, Алекс, рад видеть вас здесь :-) Имейте в виду, что когда я делаю (знаю вы уже это знаете) SELECT INTO против большой таблицы вы получите блокировку – SQLMenace

Смежные вопросы