行列转换

来源:互联网 发布:梁道长 知乎 编辑:程序博客网 时间:2024/04/30 03:30

表如下
ID     流程   日期
1       A      9-1
2       A      9-1
3       B      9-1
4       C      9-1
1       B      9-2
2       B      9-2
3       C      9-2
4       D      9-2
想得到的结果是
        9-1    9-2
A       2      0
B       1      2
C       1      1
D       0      1

 

create table 表(ID int, 流程 varchar(10),日期 varchar(10))
insert into 表 values(1,       'A',      '9-1')
insert into 表 values(2,       'A',      '9-1')
insert into 表 values(3,       'B',      '9-1')
insert into 表 values(4,       'C',      '9-1')
insert into 表 values(1 ,      'B',      '9-2')
insert into 表 values(2 ,      'B',      '9-2')
insert into 表 values(3 ,      'C',      '9-2')
insert into 表 values(4 ,      'D',      '9-2')
go

--日期固定的写法
select 流程 ,
  sum(case 日期 when '9-1' then 1 else 0 end) [9-1],
  sum(case 日期 when '9-2' then 1 else 0 end) [9-2]
from 表
group by 流程
/*
流程       9-1         9-2        
---------- ----------- -----------
A          2           0
B          1           2
C          1           1
D          0           1
(所影响的行数为 4 行)
*/

--日期不固定的写法
declare @sql varchar(8000)
set @sql = 'select 流程'
select @sql = @sql + ' , sum(case 日期 when ''' + 日期 + ''' then 1 else 0 end) [' + 日期 + ']'
from (select distinct 日期 from 表) as a
set @sql = @sql + ' from 表 group by 流程'
exec(@sql)
/*
流程       9-1         9-2        
---------- ----------- -----------
A          2           0
B          1           2
C          1           1
D          0           1
(所影响的行数为 4 行)
*/

drop table 表

 

原创粉丝点击