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

       开发过程中,由于自己的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);

      如图:

       

      上述语句就能实现文章开头中所要求的功能,有兴趣的同学可以随便找两张表尝试一下。


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值