最近在做一个数据统计,要求对一个表中的数据按照两个维度呈现,也就是传统的交叉表
比如,有一个问题表,有三个字段,(标题、问题类别、问题状态)
要求按照不同的类别,分别统计处各个状态的问题数量(如:产品问题中未处理的数量、服务问题中遗留问题数量等等)。
经过查找和尝试,终于生成了结果,现在分享给大家。
通过 Sql 2005 中的 Pivot 函数,可以方便的制作交叉表。
关于Pivot的用法,就不详细说了,大家可以百度一下,或者看sql server的帮助文档
下面是代码部分
结果截图:
进一步思考:
经过使用大家会发现,由于pivot中的字段必须是静态输入的,in([未处理],[已处理],[无效反馈])
这使得程序不够灵活,比如我增加了一个状态,那就需要修改SQL语句
能不能把这些字段也变成动态生成的呢,答案是肯定的。
我们可以通过自定义函数,读取QuestionClass生成 in 部分的字段。
动态生成sql:
这样可以得到同样的结果。
总结:
通过Pivot和动态生成sql的方法,可以使交叉表统计更加灵活。