SQLSERVER数据集行列转换PIVOT

假设有表

create table 考勤

(

人员 varchar(10),

日期 varchar(8),

签到 varchar(2)

)


insert into 考勤 values('张三', '20140901', '是')

insert into 考勤 values('张三', '20140902', '否')

insert into 考勤 values('李四', '20140901', '是')


select * from 考勤


人员 日期 签到
张三 20140901
张三 20140902
李四 20140901


select * from 考勤
pivot(max(签到) for 人员 in(张三, 李四)) 日期

日期 张三 李四
20140901
20140902 NULL

更新:

今天正好有碰到一个需求用了这个方法,把例子和语句放上来

select * from
 (
 select substring(examdate, 1, 6) as 月份,rrq.EndoscopyType ,COUNT(*) as 工作量
 from ris_request rrq
 where rrq.ModalityRemark=''US'' and rrq.ExamDate>''20130101''
 group by rrq.EndoscopyType,substring(examdate, 1, 6)

这个是原先的语句和结果集

月份 EndoscopyType 工作量
201407 NULL 1
201407  3
201407 GE Vivid E9 2
201408 GE Vivid E9 1
201408 PHILIPS CX50 6
201409  4
201409 PHILIPS CX50 7
201409 飞利浦心超 IE33 1
201410  6
201410 PHILIPS M2540A 4
201410 飞利浦心超 IE33 1

统计每个月每个超声设备的工作量,需求要求将设备固定在第一列,以月份作为剩下的列,每个结果为该设备当月的工作量

declare @exammonthrange varchar(1000)
declare @sql varchar(6000)
set @exammonthrange = ''
select @exammonthrange = @exammonthrange + '[' + 月份 + '],'
from (
select distinct SUBSTRING(RIS_REQUEST.ExamDate,1, 6) as 月份
from ris_request
where ModalityRemark='US' and RIS_REQUEST.ExamDate>'20130101'
) as 月份表
print @exammonthrange
if(LEN(@exammonthrange) > 0)
begin
    set @exammonthrange = SUBSTRING(@exammonthrange, 1, LEN(@exammonthrange) - 1);
    print @exammonthrange;
    set @sql =
 'select * from
 (
 select substring(examdate, 1, 6) as 月份,rrq.EndoscopyType ,COUNT(*) as 工作量
 from ris_request rrq
 where rrq.ModalityRemark=''US'' and rrq.ExamDate>''20130101''
 group by rrq.EndoscopyType,substring(examdate, 1, 6)
 ) as A
 pivot(max(工作量) for 月份 in (' + @exammonthrange + ')) EndoscopyType';
 print @sql;
 exec(@sql)
end

EndoscopyType 201407 201408 201409 201410
NULL 1 NULL NULL NULL
 3 NULL 4 6
GE Vivid E9 2 1 NULL NULL
PHILIPS CX50 NULL 6 7 NULL
PHILIPS M2540A NULL NULL NULL 4
飞利浦心超 IE33 NULL NULL 1 1


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值