日期:2014-05-18  浏览次数:20417 次

[求sql语句]标题不知道怎么描述,请进来看详情。
需求如下:

有一张表Table:
  Date Result
2011-01-01 胜
2011-01-02 胜
2011-01-03 胜
2011-01-03 负
2011-01-03 负
2011-01-04 胜
2011-01-04 胜
2011-01-04 胜

select出来的结果如下:
  Date 胜 负
2011-01-01 1 0
2011-01-02 1 0
2011-01-03 1 2
2011-01-04 3 0


谢谢各位!

------解决方案--------------------
SQL code

--> 测试数据:[tbl]
go
if object_id('[tbl]') is not null 
drop table [tbl]
go
create table [tbl](
[Date] datetime,
[Result] varchar(2)
)
go
insert [tbl]
select '2011-01-01','胜' union all
select '2011-01-02','胜' union all
select '2011-01-03','胜' union all
select '2011-01-03','负' union all
select '2011-01-03','负' union all
select '2011-01-04','胜' union all
select '2011-01-04','胜' union all
select '2011-01-04','胜'

declare @str varchar(1000)
set @str=''
select @str=@str+','+[Result]+'=sum(case when [Result]='
+QUOTENAME([Result],'''')+' then 1 else 0 end)' from tbl
group by [Result]
exec('select convert(varchar(10),[Date],120) as [Date] '+@str+
' from tbl group by convert(varchar(10),[Date],120)')

/*
Date    胜    负
2011-01-01    1    0
2011-01-02    1    0
2011-01-03    1    2
2011-01-04    3    0
*/

------解决方案--------------------
SQL code

select
 CONVERT(VARCHAR(10) , DATE, 120),
 sum(case when result='胜' then 1 else 0 end) as '胜', 
 sum(case when result='负' then 1 else 0 end) as '负' 
from tbl group by CONVERT(VARCHAR(10) , DATE, 120)