当前位置: 代码迷 >> SQL >> 软件开发好手必须掌握的4大SQL精髓语句(一)
  详细解决方案

软件开发好手必须掌握的4大SQL精髓语句(一)

热度:46   发布时间:2016-05-05 13:34:02.0
软件开发高手必须掌握的4大SQL精髓语句(一)

 

        如果您立志于成为软件开发高手,或者想通过本文来检验一下您是否为软件开发高手。请阅读下文,否则请绕行。

 

 

 

软件开发高手必须掌握的4大SQL精髓语句(一)

                         马根峰

           ( 广东联合电子收费股份有限公司, 广州 510300)

 

作者博客:

    CSDN博客:http://blog.csdn.net/magenfeng

   新浪博客:  http://blog.sina.com.cn/magenfeng

   QQ空间:  http://user.qzone.qq.com/630414817/main#!

 

 

      引言  

        随着计算机在社会各领域应用的深入,软件开发人员不得不面临着或多或少的数据处理、数据库访问。

在SQL(Structured Query Language)语言DML中,有四大语句堪称其精髓部分。下面就讲述一下其中之一, Case When 语句的用法。本文介绍用它实现数据仓库中的维度转换,来将数据展现给分析人员来进行决策支持与分析。

       CASE WHEN  Conition   

                    THEN     。。。

                    ELSE     。。。

                    END

 

 

      数据仓库中的维度转换

        在数据仓库数据展现中,我们通常要用到将数据表进行维度转换。如数据仓库中某一关系模式

            Vehsm (Roadno, Year , Fluxcount,。。。)

        对于数据分析人员来说,他们更想了解某一条高速公路在一段时间内车流量的变化情况,那最好就是将关系表 TB_ADFLUXCOLT 以下面的关系模式来展现

            Vehcount_Trans (Roadno, Year Fluxcount 1, .。。。, Year Fluxcount n)

 

        下面笔者就分别以Case When语句、BrioQuery来分别演示一下如何实现维度转换。

  

 

      Case When语句来实现维度转换

        下面就以DB2数据库为例,以“万能数据库查询分析器” 中文版本《DB 查询分析器》、英文版本《DB Query Analyzer》作为客户端工具来来演示一下Case When 语句如何实现维度转换。

 

 

selectuu.roadno,rr.roadname,

      sum(casewhenuu.year=2009thenuu.FLUXCOUNTelse0 endasyear_2009,

      sum(casewhenuu.year=2010thenuu.FLUXCOUNTelse0 endasyear_2010,

      sum(casewhenuu.year=2011thenuu.FLUXCOUNTelse0 endasyear_2011

from

(

   selectroadno,year(squaddate)asyear,sum(FLUXCOUNT)asFLUXCOUNT

   fromTB_ADFLUXCOLT 

   where  squaddatebetween'2009-01-01'and'2011-12-31'andoiflag=0

   groupby roadno,year(squaddate)

) uu, 

(

   selectdistinct  roadno,roadname

   fromtb_road  

   wherestatus=0andlevel in (0,1)  androadnamenot like '%南部快速%'

) rr

whereuu.roadno=rr.roadno 

groupbyuu.roadno,rr.roadname

withur;

 

 

 
            图1    DB 查询分析器中输入要执行的Case When语句

 



           图2    DB 查询分析器  执行Case When语句

 

 

  
           图3    DB Query Analyzer 中输入要执行的Case When语句

 

 
           图4    DB Query Analyzer 执行Case When语句

 

 

      BrioQuery来实现维度转换

        在数据仓库工具中,BrioQuery提供了比较强大的数据展现功能,能方便地实现上面的维度转换。

 

 
           图5    BrioQuery   数据表 Vehsm

 

 


            图6    BrioQuery   执行查询后的结果

 

 

           图7    BrioQuery   维度转换后的结果

 

 

        但对于大数据量表的维度转换来说,则几乎无法完成,笔者在中文核心刊物《电信科学》2003年11期《广东电信公话200专用话机话务动态分析系统的构建》文章中,详细地介绍了“广东电信公话200专用话机话务动态分析系统”中是如何实现这一点的,这个话务动态系统是自己以前在广东省电信有限公司工作的时候独自开发的,有兴趣的话,可以看

 

 

        本人的CSDN博客的博文:

            “广东电信公话200专用话机话务动态分析系统的构建”

             http://blog.csdn.net/magenfeng/article/details/7691403

  相关解决方案