数据库查询遇到的问题

原表数据如此。



 共有7个字段,我需要根据企业名称 地区 还有 年度 求 各污染物的总和。

格式为这样


也就是做成这种格式。

这个我请教了一个学长 用聚合函数可以指定新列。

select  年度 nd,企业名称 qymc,

sum(decode(污染物名称,'二氧化碳', 排放量,0))"EYHT",

sum(decode(污染物名称,'氮氧化物', 排放量,0)) "DYHW",

sum(decode(污染物名称,'烟尘', 排放量,0))"YC"

from  v_fqpwxx2 where 1=1 and 污染物名称 in ('氮氧化物') and 年度 = '2012'

扫描二维码关注公众号,回复: 1177935 查看本文章

group by (年度,企业名称) order by  sum(decode(污染物名称,'氮氧化物', 排放量,0)) desc

到了这一步数据查出来变成了这样。



 

已经可以查询年度企业名称 以及各个污染物的排放量、

但是问题又来了 也就是我自己解决的问题。因为出现了新的需求。

 

因为聚合函数无法作为条件 但是又有这个需求,而且还需要查询前N条的记录使用rownum, rownum无法和其他where条件一起指定。所以再第二个子查询里面写好where条件 再在第三个查询中取其中符合条件的前N条记录。

完整sql如下。

 select nd,qymc,eyhl,dyhw,yc from(

select  年度 nd,企业名称 qymc,

sum(decode(污染物名称,'二氧化硫', 排放量,0))"EYHL",

sum(decode(污染物名称,'氮氧化物', 排放量,0)) "DYHW",

sum(decode(污染物名称,'烟尘', 排放量,0))"YC"

from  v_fqpwxx2 where 1=1 and 污染物名称 in ('氮氧化物')

group by (年度,企业名称) order by  sum(decode(污染物名称,'氮氧化物', 排放量,0)) desc)

where dyhw>400 and dyhw<500 and rownum<=10

其中有个需要注意的小问题,就是sum(decode(污染物名称,'二氧化硫', 排放量,0))"EYHL", 函数指定的别名不能用小写,会以至于第二层查询出错。

猜你喜欢

转载自zzp1994114.iteye.com/blog/2128122