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