文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | WPS | 杀毒软件
清风网络
首 页 软件下载 网络学院
QQ 电脑入门 游戏 操作系统 图形处理 办公软件 媒体动画 精文荟萃 工具软件 网络编程 程序开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络网络编程数据库详细说明一下SQL中CASE语句强大功能
精品推荐
特别推荐
·用户登录存储过程
·SQL数据库完全使用手册
·进阶:精妙SQL语句介绍
·sql删除记录
·学习SQL语句之SQL语句大全
·数据备份失败的五个原因及解决办法
·解决SQL Server常见的七个经典问题
·SQL存储过程的概念,创建,调用,管理,删除,优点
热点TOP10
·MSSQL 通用分页存储过程的源码共享
·通过优化让你的SQL运行速度明显提高
·用独立的DLL来存储图片(资源文件)
·编程实例 WebGroupBox(Aspx控件)
·数据结构(C#)_排序算法(冒泡排序)
·详细介绍Oracle数据库的启动和关闭
·在DataTable中查询应该注意的问题
·从数据库来管理个人网站安全

详细说明一下SQL中CASE语句强大功能

日期:2008年9月18日 作者: 查看:[大字体 中字体 小字体]

SQL语句中的CASE语句与高级语言中的switch语句,是标准SQL的语法,适用与一个条件判断有多种值的情况下分别执行不同的操作。灵活应用CASE语句可以使SQL语句变得简洁易读,下面在DB2环境下通过一个简单的查询来展示SQL CASE语句的强大功能。
Windows XP Professional
有一个行业代码表,建表SQL和数据如下,要求查出代码别名、代码名、行业名、代码长度。代码别名为数字序号与大写英文字母的序号的映射值,比如代码 '01'的别名就是'A','02'的别名就是'B',依次类推。
建表SQL和初始化数据SQL
-------------------------------------
drop table DM_HYML;
create table DM_HYML
  HYML_DM CHAR(2) not null,
  HYML_MC VARCHAR(100) not null,
  XYBZ    CHAR(1) not null
alter table DM_HYML
  add primary key (HYML_DM);
comment on table DM_HYML is
    '行业门类代码表';
comment on column DM_HYML.HYML_DM is
    '行业门类代码';
comment on column DM_HYML.HYML_MC is
    '行业门类名称';
comment on column DM_HYML.XYBZ is
    '选用标志';
delete from DM_HYML;
insert into DM_HYML (HYML_DM, HYML_MC, XYBZ)
values ('01', '农、林、牧、渔业', 'Y');
insert into DM_HYML (HYML_DM, HYML_MC, XYBZ)
values ('03', '制造业', 'Y');
insert into DM_HYML (HYML_DM, HYML_MC, XYBZ)
values ('02', '采矿业', 'Y');
insert into DM_HYML (HYML_DM, HYML_MC, XYBZ)
values ('04', '电力、燃气及水的生产和供应业', 'Y');
insert into DM_HYML (HYML_DM, HYML_MC, XYBZ)
values ('05', '建筑业', 'Y');
insert into DM_HYML (HYML_DM, HYML_MC, XYBZ)
values ('06', '交通运输、仓储和邮政业', 'Y');
insert into DM_HYML (HYML_DM, HYML_MC, XYBZ)
values ('07', '信息传输、计算机服务和软件业', 'Y');
insert into DM_HYML (HYML_DM, HYML_MC, XYBZ)
values ('08', '批发和零售业', 'Y');
insert into DM_HYML (HYML_DM, HYML_MC, XYBZ)
values ('09', '住宿和餐饮业', 'Y');
insert into DM_HYML (HYML_DM, HYML_MC, XYBZ)
values ('10', '金融业', 'Y');
insert into DM_HYML (HYML_DM, HYML_MC, XYBZ)
values ('11', '房地产业', 'Y');
insert into DM_HYML (HYML_DM, HYML_MC, XYBZ)
values ('12', '租赁和商务服务业', 'Y');
insert into DM_HYML (HYML_DM, HYML_MC, XYBZ)
values ('13', '科学研究、技术服务和地质勘查业', 'Y');
insert into DM_HYML (HYML_DM, HYML_MC, XYBZ)
values ('14', '水利、环境和公共设施管理业', 'Y');
insert into DM_HYML (HYML_DM, HYML_MC, XYBZ)
values ('15', '居民服务和其他服务业', 'Y');
insert into DM_HYML (HYML_DM, HYML_MC, XYBZ)
values ('16', '教育', 'Y');
insert into DM_HYML (HYML_DM, HYML_MC, XYBZ)
values ('17', '卫生、社会保障和社会福利业', 'Y');
insert into DM_HYML (HYML_DM, HYML_MC, XYBZ)
values ('18', '文化、体育和娱乐业', 'Y');
insert into DM_HYML (HYML_DM, HYML_MC, XYBZ)
values ('19', '公共管理和社会组织', 'Y');
insert into DM_HYML (HYML_DM, HYML_MC, XYBZ)
values ('20', '国际组织', 'Y');
select (case t.hyml_dm
         when '01' then 'A'
         when '02' then 'B'
         when '03' then 'C'
         when '04' then 'D'
         when '05' then 'E'
         when '06' then 'F'
         when '07' then 'G'
         when '08' then 'H'
         when '09' then 'I'
         when '10' then 'J'
         when '11' then 'K'
         when '12' then 'L'
         when '13' then 'M'
         when '14' then 'N'
         when '15' then 'O'
         when '16' then 'P'
         when '17' then 'Q'
         when '18' then 'R'
         when '19' then 'S'
         when '20' then 'T'
         when '21' then 'U'
         when '22' then 'V'
         when '23' then 'W'
         when '24' then 'X'
         when '25' then 'Y'
         when '26' then 'Z'
       end) as hydmbm,
       t.hyml_dm,
       t.hyml_mc,
       length(t.hyml_dm) as sublenth,
       '00' as zb
  将此sql代码保存为C:\test.sql文件,在DOS下进入DB2安装目录的bin目录下,链接数据库并执行(命令)此SQL,并重定向输出查询结果和信息到C:\test.txt。
C:\IBM\SQLLIB\BIN>db2  -tvf C:\test.sql > C:\test.txt
打开C:\test.txt文件查看结果:
select (case t.hyml_dm when '01' then 'A' when '02' then 'B' when '03' then 'C' when '04' then 'D' when '05' then 'E' when '06' then 'F' when '07' then 'G' when '08' then 'H' when '09' then 'I' when '10' then 'J' when '11' then 'K' when '12' then 'L' when '13' then 'M' when '14' then 'N' when '15' then 'O' when '16' then 'P' when '17' then 'Q' when '18' then 'R' when '19' then 'S' when '20' then 'T' when '21' then 'U' when '22' then 'V' when '23' then 'W' when '24' then 'X' when '25' then 'Y' when '26' then 'Z' end) as hydmbm, t.hyml_dm, t.hyml_mc, length(t.hyml_dm) as sublenth, '00' as zb from dm_hyml t
HYDMBM HYML_DM HYML_MC                                                                                                                                                                                                  SUBLENTH    ZB
------ ------- ---------------------------------- ----- --
A      01      农、林、牧、渔业                       2 00
C      03      制造业                                 2 00
B      02      采矿业                                 2 00
D      04      电力、燃气及水的生产和供应业           2 00
E      05      建筑业                                 2 00
F      06      交通运输、仓储和邮政业                 2 00
G      07      信息传输、计算机服务和软件业           2 00
H      08      批发和零售业                           2 00
I      09      住宿和餐饮业                           2 00
J      10      金融业                                 2 00
K      11      房地产业                               2 00
L      12      租赁和商务服务业                       2 00
M      13      科学研究、技术服务和地质勘查业         2 00
N      14      水利、环境和公共设施管理业             2 00
O      15      居民服务和其他服务业                   2 00
P      16      教育                                   2 00
Q      17      卫生、社会保障和社会福利业             2 00
R      18      文化、体育和娱乐业                     2 00
S      19      公共管理和社会组织                     2 00
T      20      国际组织                               2 00
  20 条记录已选择。
呵呵,CASE语句方便吧。
注意:DB2命令行下执行sql语句只能是一行,如果要执行多行,可以将sql保存为文件执行,执行的方法是:
1、执行SQL语句
db2  -tvf [filename].sql
2、执行存储过程
db2 -td@ -vf [filename].sql
当然这些命令的选项根据需要有所不同,可以直接从命令行查看这些选项:db2 ? OPTIONS
 选项    描述                                      缺省设置
 ------  ----------------------------------------  ---------------
   -a    显示 SQLCA                                OFF
   -c    自动落实                                  ON
   -d    检索并显示 XML 声明                       OFF
   -e    显示 SQLCODE/SQLSTATE                     OFF
   -f    读取输入文件                              OFF
   -i    显示 XML 数据并带有缩进                   OFF
   -l    将命令记录到历史记录文件中                OFF
   -n    除去换行字符                              OFF
   -o    显示输出                                  ON
   -p    显示 db2 交互式提示符                     ON
   -q    保留空格和换行符                          OFF
   -r    将输出报告保存到文件                      OFF
   -s    在命令出错时停止执行                      OFF
   -t    设置语句终止字符                          OFF
   -v    回传当前命令                              OFF
   -w    显示 FETCH/SELECT 警告消息                ON
   -x    不打印列标题                              OFF
   -z    将所有输出保存到输出文件                  OFF
 使用 DB2OPTIONS 环境变量定制选项缺省值。
 紧跟选项字母后的减号(-)使该选项关闭。
 若将减号(-)更改为加号(+),则选项
 文件输入方式)。
CASE和IF的区别:
在高级语言中,CASE的可以用IF来替代,但是在SQL中不行。
CASE是SQL标准定义的,IF是数据库系统的扩展。
CASE可以用于SQL语句和SQL存储过程、触发器,IF只能用于存储过程和触发器。
在SQL过程和触发器中,用IF替代CASE代价都相当的高,相当的麻烦,难以实现。
CASE语句应用对比:
下面做两组查询,每组用两种方法来实现,一种是用case,一种是不用case,谁快谁获胜,测试环境依然DB2 V9.1、windows server 2003。
第一组:查询dj_zt表状态为'07'或'11'、qylx_dm = '03'的所有记录数。

[1] [2] [3] 下一页 



上一篇:MySQL中MyISAM引擎与InnoDB引擎性能简单测试

下一篇:把应用程序和Oracle客户端一起打包
相关文章:
·基于SQL Server的WEB应用程序注入攻击详细介绍
·HighPoint具有磁盘阵列功能的无盘网络系统解决方案
·有关服务器知识详细介绍
·秦殇复活-详细剧情攻略
·现在主板都支持哪些的功能啊?
·阿里联盟:关于结算时间问题的统一说明
·我做gg广告从0到每月1000美元详细全过程
相关软件:
·公司企业网站管理系统模板功能强大版
·功能较强的一个FLASH编辑器
·LaneCat网猫外网全功能试用版 1.671
·多功能密码破解软件 4.5
·Msplayer多功能多媒体播放器 V6.0.2.20 精简版
·超功能计算器(Super Function Calculator) V5.10
·神秘视线:主要疑犯(Mystery Case Files: Prime Suspects)

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.viphot.com
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.viphot.com All Rights Reserved. 鄂ICP备05000083号Powered by:viphot