Date Priority
2006-10-07 2
2006-10-07 2
2006-10-13 1
2006-11-07 2
2006-11-08 2
2006-11-22 3
2006-12-19 2
2007-01-09 2
2007-01-09 3
2007-01-10 2
2007-01-12 1
2007-01-16 1其中Priority的取值只能为1,2,3最后得到每天的Priority个数,
如下结果:
Date P1 P2 P3
2006-10-07 0 2 0
2006-10-13 1 0 0
2006-11-07 0 1 0
...........
2006-10-07 2
2006-10-07 2
2006-10-13 1
2006-11-07 2
2006-11-08 2
2006-11-22 3
2006-12-19 2
2007-01-09 2
2007-01-09 3
2007-01-10 2
2007-01-12 1
2007-01-16 1其中Priority的取值只能为1,2,3最后得到每天的Priority个数,
如下结果:
Date P1 P2 P3
2006-10-07 0 2 0
2006-10-13 1 0 0
2006-11-07 0 1 0
...........
count(case Priority when 2 then Priority end)[p2],
count(case Priority when 3 then Priority end)[p3]
from tab group by Date
sum(case when p1=1 then 1 else 0 end) as P1,
sum(case when p1=2 then 1 else 0 end) as P2,
sum(case when p1=3 then 1 else 0 end) as P3
from 表
group by Date
--下面是动态SQLif object_id('pubs..tb') is not null
drop table tb
gocreate table tb(Date varchar(10),Priority int)
insert into tb(Date,Priority) values('2006-10-07',2)
insert into tb(Date,Priority) values('2006-10-07',2)
insert into tb(Date,Priority) values('2006-10-13',1)
insert into tb(Date,Priority) values('2006-11-07',2)
insert into tb(Date,Priority) values('2006-11-08',2)
insert into tb(Date,Priority) values('2006-11-22',3)
insert into tb(Date,Priority) values('2006-12-19',2)
insert into tb(Date,Priority) values('2007-01-09',2)
insert into tb(Date,Priority) values('2007-01-09',3)
insert into tb(Date,Priority) values('2007-01-10',2)
insert into tb(Date,Priority) values('2007-01-12',1)
insert into tb(Date,Priority) values('2007-01-16',1)
godeclare @sql varchar(8000)
set @sql = 'select Date'
select @sql = @sql + ' , sum(case Priority when ''' + cast(Priority as varchar) + ''' then 1 else 0 end) [' + 'P' + cast(Priority as varchar) + ']'
from (select distinct Priority from tb) as a
set @sql = @sql + ' from tb group by Date'
exec(@sql) drop table tb/*
Date P1 P2 P3
---------- ----------- ----------- -----------
2006-10-07 0 2 0
2006-10-13 1 0 0
2006-11-07 0 1 0
2006-11-08 0 1 0
2006-11-22 0 0 1
2006-12-19 0 1 0
2007-01-09 0 1 1
2007-01-10 0 1 0
2007-01-12 1 0 0
2007-01-16 1 0 0
&/
sum(case when Priority=1 then 1 else 0 end) as P1,
sum(case when Priority=2 then 1 else 0 end) as P2,
sum(case when Priority=3 then 1 else 0 end) as P3
from tb
group by Date/*
date P1 P2 P3
---------- ----------- ----------- -----------
2006-10-07 0 2 0
2006-10-13 1 0 0
2006-11-07 0 1 0
2006-11-08 0 1 0
2006-11-22 0 0 1
2006-12-19 0 1 0
2007-01-09 0 1 1
2007-01-10 0 1 0
2007-01-12 1 0 0
2007-01-16 1 0 0(所影响的行数为 10 行)*/
create table tb(Date varchar(10),Priority int)
insert into tb(Date,Priority) values('2006-10-07',2)
insert into tb(Date,Priority) values('2006-10-07',2)
insert into tb(Date,Priority) values('2006-10-13',1)
insert into tb(Date,Priority) values('2006-11-07',2)
insert into tb(Date,Priority) values('2006-11-08',2)
insert into tb(Date,Priority) values('2006-11-22',3)
insert into tb(Date,Priority) values('2006-12-19',2)
insert into tb(Date,Priority) values('2007-01-09',2)
insert into tb(Date,Priority) values('2007-01-09',3)
insert into tb(Date,Priority) values('2007-01-10',2)
insert into tb(Date,Priority) values('2007-01-12',1)
insert into tb(Date,Priority) values('2007-01-16',1)declare @sql varchar(4000)
set @sql=''
select @sql=@sql+','+quotename('P'+rtrim(Priority))+'=sum(case Priority when '+rtrim(Priority)+' then Priority else 0 end)'
from tb group by Priority
exec('select Date'+@sql+' from tb group by Date')
Date P1 P2 P3
---------- ----------- ----------- -----------
2006-10-07 0 4 0
2006-10-13 1 0 0
2006-11-07 0 2 0
2006-11-08 0 2 0
2006-11-22 0 0 3
2006-12-19 0 2 0
2007-01-09 0 2 3
2007-01-10 0 2 0
2007-01-12 1 0 0
2007-01-16 1 0 0(10 行受影响)
set @sql=''
select @sql=@sql+','+quotename('P'+rtrim(Priority))+'=sum(case Priority when '+rtrim(Priority)+' then 1 else 0 end)'--把Priority改为1
from tb group by Priority
exec('select Date'+@sql+' from tb group by Date')Date P1 P2 P3
---------- ----------- ----------- -----------
2006-10-07 0 2 0
2006-10-13 1 0 0
2006-11-07 0 1 0
2006-11-08 0 1 0
2006-11-22 0 0 1
2006-12-19 0 1 0
2007-01-09 0 1 1
2007-01-10 0 1 0
2007-01-12 1 0 0
2007-01-16 1 0 0(10 行受影响)