您的位置:首页 > 数据库

SQL集萃(一) Case…When…Then 实现无表字段拼表格

2016-04-30 20:36 393 查看
       开发过程中,由于自己的sql经验不足,而有些问题通过搜索描述起来又比较复杂,或者问题与结果文不对题,因此写该系列博客,希望通过不断的积累为自己和读者提供一些参考。

       业务需求:查询2015年全国、全行业的某终端在用个数、最大负荷、用电量和终端覆盖率。

       详细描述:结果以表格形式显示,“全国”列均显示“全国”;行业分为八大行业,该列显示各行业名称,如化工、冶金等;在用终端数、最大负荷、用电量和终端覆盖率均读表即可。

       该查询过程涉及到三张表:

       q_online_monitorstat(终端表)


  

       pub_region(地区表)

      

 

       pub_rade(字典表)

                                         



       终端表含地区的代码(code)外键和终端使用情况;地区表含地区code、名称等对照信息;字典表含行业类别代码和对应名称。

       备注:sql语句中66代表全行业;86代表全国。

       困难点:三张表的字段中并没有“全国”和“全行业”这几个字,要拼出这样的信息并返回到前台又必须在sql中解决。

       解决办法:用Case…When…Then语句,表示那个字段,在何种情况下,实现什么样的效果。

       实例:

       (SELECT CASE q.ORG_CODE WHEN 86 THEN '全国' end orgName,CASE q.TRADE_CODE WHEN 66 THEN '全行业' end traName,q.MONITOR_NUM,q.MAX_FH,q.YDL,q.COVER_RATE FROM q_online_monitorstat q WHERE q.TRADE_CODE=66 and q.ORG_CODE=86 and q.`STATUS`=1 and q.YM=2015)
UNION
(SELECT c.SHORT_NAME,b.`name`,a.qysl,a.fh,a.ydl,a.fgl
FROM
(SELECT SUM(q.MONITOR_NUM) qysl,q.MAX_FH fh,SUM(q.YDL) ydl,q.COVER_RATE fgl,q.TRADE_CODE type,q.ORG_CODE xcode,q.YM data FROM q_online_monitorstat q WHERE q.`STATUS`=1 and SUBSTR(q.YM,1,4)=2015 and q.ORG_CODE ='86' GROUP BY q.ORG_CODE,q.TRADE_CODE )a,
(SELECT t.ID id,t.NAME name FROM pub_rade t WHERE t.LEVEL=7)b,
(select ORG_CODE,SHORT_NAME from pub_region where ORG_CODE='86')c
WHERE a.type=b.id and c.ORG_CODE=a.xcode limit 0,10);

      如图:

       


      上述语句就能实现文章开头中所要求的功能,有兴趣的同学可以随便找两张表尝试一下。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: