日期:2014-05-19  浏览次数:20470 次

呜呜,求一条SQL语句,
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
...........

------解决方案--------------------
select Date,count(case Priority when 1 then Priority end)[p1],
count(case Priority when 2 then Priority end)[p2],
count(case Priority when 3 then Priority end)[p3]
from tab group by Date
------解决方案--------------------
--上面gahade(与君共勉)兄是在你Priority只有1,2,3的情况下的静态SQL
--下面是动态SQL

if object_id( 'pubs..tb ') is not null
drop table tb
go

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)
go

declare @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
&/