按多列汇总数据

时间:2009-06-29 20:08:16

标签: c# sql-server

我的老板要我编写一份包含以下内容的报告:

  • 按州分列的员工人数饼图
  • 按年龄段(10年括号)计算员工人数的饼图
  • 员工服务年限(5年括号)的饼图
  • 员工男/女分类饼图
  • 按工资范围计算员工人数的饼图(计算机生成括号)。

可能还有其他人。

我知道我可以通过写5个不同的sql语句来做到这一点。但是,这似乎会为一个报告生成5个表扫描。

我可以切换齿轮并进行一次表扫描并分析前端的每个记录并增加计数器,并且可能通过一次通过完成此操作。

stackoverflow的集体智慧会以何种方式进行?

有没有办法用T-SQL中的CUBE或ROLL UP子句来实现这个目的?

3 个答案:

答案 0 :(得分:2)

如果你想要5个饼图并需要总结那么你需要5个SQL语句,因为你的WHERE子句对于每个

是不同的

答案 1 :(得分:2)

如果您的数据已正确编入索引,那么这些报告可能根本不需要任何表扫描。

实际上,对于这样的问题,您应该以简单的方式编写报告代码,然后查看性能是否符合业务要求。如果没有,查看优化策略。

答案 2 :(得分:1)

通过将中间结果存储在表变量或临时表中,然后针对它运行更多聚合,可能可以获得一些性能提升。仅包含两个结果集的示例:

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;