关闭

行列转换

标签: insertsqltablecgo
303人阅读 评论(0) 收藏 举报
分类:

表如下
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 表

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:38754次
    • 积分:586
    • 等级:
    • 排名:千里之外
    • 原创:18篇
    • 转载:9篇
    • 译文:3篇
    • 评论:3条
    最新评论