读书人

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

发布时间: 2012-09-19 13:43:53 作者: rapoo

软件开发高手必须掌握的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#!

0 引言

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

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

CASE WHEN Conition

THEN 。。。

ELSE 。。。

END

1 数据仓库中的维度转换

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

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

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

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

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

2 Case When语句来实现维度转换

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

selectuu.roadno,rr.roadname,

sum(casewhenuu.year=2009thenuu.FLUXCOUNTelse0 end) asyear_2009,

sum(casewhenuu.year=2010thenuu.FLUXCOUNTelse0 end) asyear_2010,

sum(casewhenuu.year=2011thenuu.FLUXCOUNTelse0 end) asyear_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;

软件开发好手必须掌握的4大SQL精髓语句(一)
图1 DB 查询分析器中输入要执行的Case When语句


软件开发好手必须掌握的4大SQL精髓语句(一)
图2 DB 查询分析器 执行Case When语句

软件开发好手必须掌握的4大SQL精髓语句(一)
图3 DB Query Analyzer 中输入要执行的Case When语句

软件开发好手必须掌握的4大SQL精髓语句(一)
图4 DB Query Analyzer 执行Case When语句

3 BrioQuery来实现维度转换

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

软件开发好手必须掌握的4大SQL精髓语句(一)
图5 BrioQuery 数据表 Vehsm

软件开发好手必须掌握的4大SQL精髓语句(一)
图6 BrioQuery 执行查询后的结果

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

图7 BrioQuery 维度转换后的结果

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

本人的CSDN博客的博文:

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

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

读书人网 >SQL Server

热点推荐