目录
一、使用case when -- then -- end实现行转列
二、case when -- then -- end嵌表使用
一、使用case when -- then -- end实现行转列
需求:如图oracle数据库有表alv_bxjf:姓名,个人缴费,单位缴费,单位名称,保险类型。
需要分组查询,行转列显示如下:
查询语句:
SELECT dwname,xm,
SUM(case when bxtype = '2' then grjf end) AS 社保个人缴费,
SUM(case when bxtype = '2' then dwjf end) AS 社保单位缴费,
SUM(case when bxtype = '8' then grjf end) AS 医保个人缴费,
SUM(case when bxtype = '8' then dwjf end) AS 医保单位缴费
FROM alv_bxjf where dwname='英雄实业' GROUP BY xm,dwname
二、case when -- then -- end嵌表使用
下图为一张, 标识,类型,中文含义对照表。
需求:查询alv_bxjf表,根据alv_lxzb表得到bxtype字段的中文含义
查询语句:
SELECT T.XM, T.GRJF, T.DWJF, T.DWNAME,
CASE
WHEN T.BXTYPE in (select bxtype from alv_lxzb where keyflag='AA14')
THEN
(select chname from alv_lxzb where keyflag='AA14' and bxtype=T.BXTYPE)
ELSE
'-'
END AS 类型
FROM ALV_BXJF T
查询结果如下图: