这是我建的表,T表示投诉,B表示抱怨,J表示举报,表为test,下面是sql代码。
select * from (
select a.月份,a.类别,
sum(case when a.名称='T' then 1 else 0 end) 投诉类统计,
sum(case when a.名称='B' then 1 else 0 end) 抱怨类统计,
sum(case when a.名称='J' then 1 else 0 end) 举报类统计,
count(a.名称) 总计
from test a group by a.月份,a.类别
union all
select b.月份,'总计',
sum(case when b.名称='T' then 1 else 0 end) 投诉类统计,
sum(case when b.名称='B' then 1 else 0 end) 抱怨类统计,
sum(case when b.名称='J' then 1 else 0 end) 举报类统计,
count(b.名称) 总计
from test b group by b.月份
) order by 1,2
下面是结果图。
希望能帮到你。
关于导出excel,一个就是改页面type为excel,还有一个就是使用第三方jar,poi,jxl什么的生成excel.
order by 1,2是指月份排序吗?我运行的时候总是报column ambiguously defined错误
@5暖暖: order by 1,2 指的是按1,2列排序,也就是按月份,和类别进行排序
@5暖暖: 另外你说的问题,由于我在pl/sql按照你给的例子测试没有出现,所以现在不好说具体问题在哪里。你的环境我也不太清楚,按照网上的说法,需要加上别名。
下面是我查到的问题可能原因:
还有一种情况也会出现该问题
select t.name,t.name,t.name
from Teacher t LEFT OUTER JOIN Student s on t.studentid = s.id
sql语句本身是没有问题的,不会在数据库客户端或诸如PL/SQL之类的工具中报错并且能正常查询出结果
但是hibernate的查询却会报上面的错误,那么问题应该出在hibernate方言或者是jdbc驱动上
解决方法是给重复的数据加上别名:
select t.name as name1,t.name as name2,t.name as name3
from Teacher t LEFT OUTER JOIN Student s on t.studentid = s.id
@5暖暖: 另外这里还有一个问题就是类别排序,我这里是按字符串排序,这样做是有问题的,最好的办法是多一列序号列用来排序,例如A业务,序号1,B业务序号2,这样我就可以把总计,人为调整成9999或者更大,最后按月份,以及这个序号进行排序才能确保总计都在每个月份最后一个显示。
@yhdino: 还有一个问题,如果我想按照月排列,像下面那样的,就是不管查询到的数据有没有都是这样固定的格式的怎么做?
@5暖暖: 不好意思,不在上班时间,没办法测试语句。
但是如果要按你这样的话,比较麻烦。打个比方,有的月份有A,有的月份没有A,这就不是一个简单的SQL就可以搞定的事情。当然也不是没有办法做:
一种就是利用存储过程来遍历,补齐没有的类别。
一种就是再建一张表,关联来补齐缺失项。
再不然就是取得数据集后,在后台自己重组数据。
相对来说比一句SQL来解决,要麻烦。
分组查出来 然后统计计算咯
导出excel用第三方pio。很强大!