我现在有以下结果集:
作者 数量 周
a 10 第一周
a 8 第二周
a 9 第三周
a 2 第四周b 1 第二周
b 2 第四周
---------------------------------------------------------------------
现需要从上面的结果集中查询出下面的结果集。某周没有的话那么对应的周的结果写成0。请问该查询语句怎么写?----------------------------------------------------------------------------
作者 第一周 第二周 第三周 第四周 合计
a 10 8 9 2 29
b 0 1 0 2 3
作者 数量 周
a 10 第一周
a 8 第二周
a 9 第三周
a 2 第四周b 1 第二周
b 2 第四周
---------------------------------------------------------------------
现需要从上面的结果集中查询出下面的结果集。某周没有的话那么对应的周的结果写成0。请问该查询语句怎么写?----------------------------------------------------------------------------
作者 第一周 第二周 第三周 第四周 合计
a 10 8 9 2 29
b 0 1 0 2 3
[第一周]=sum(case when 周='第一周' then 数量 else 0 end ),
[第二周]=sum(case when 周='第二周' then 数量 else 0 end ),
[第三周]=sum(case when 周='第三周' then 数量 else 0 end ),
[第四周]=sum(case when 周='第四周' then 数量 else 0 end ),
合计=sum(数量)
from tb
group by 作者
order by 作者
CASE WHEN 周 =' 第一周 ' THEN 数量 ELSE 0 END AS ' 第一周 ' ,
CASE WHEN 周 =' 第二周 ' THEN 数量 ELSE 0 END AS ' 第二周 ' ,
CASE WHEN 周 =' 第三周 ' THEN 数量 ELSE 0 END AS ' 第三周 ' ,
CASE WHEN 周 =' 第四周 ' THEN 数量 ELSE 0 END AS ' 第四周 '
FROM TB GROUP BY 作者
作者,
第一周=SUM(case when 周='第一周' then 数量 else 0 end),
第二周=SUM(case when 周='第二周' then 数量 else 0 end),
第三周=SUM(case when 周='第三周' then 数量 else 0 end),
第四周=SUM(case when 周='第四周' then 数量 else 0 end),
合计=isnull(SUM(数量),0)
from tb
group by 作者
第一周=sum(case 周 when '第一周' then 数量 else 0 end),
第二周=sum(case 周 when '第二周' then 数量 else 0 end),
第三周=sum(case 周 when '第三周' then 数量 else 0 end),
第四周=sum(case 周 when '第四周' then 数量 else 0 end),
合计=sum(数量)
from tb
group by 作者
MAX(CASE WHEN 周 =' 第一周 ' THEN 数量 ELSE 0 END) AS ' 第一周 ' ,
MAX(CASE WHEN 周 =' 第二周 ' THEN 数量 ELSE 0 END )AS ' 第二周 ' ,
MAX(CASE WHEN 周 =' 第三周 ' THEN 数量 ELSE 0 END) AS ' 第三周 ' ,
MAX(CASE WHEN 周 =' 第四周 ' THEN 数量 ELSE 0 END) AS ' 第四周 ' ,
SUM(数量) '合计'
FROM TB GROUP BY 作者
还要求合计修改
insert @tb select 'a', 8 ,'第二周'
insert @tb select 'a', 9 ,'第三周'
insert @tb select 'a', 2 ,'第四周' insert @tb select 'b', 1 ,'第二周'
insert @tb select 'b', 2 ,'第四周' select 作者,
[第一周]=sum(case when 周='第一周' then 数量 else 0 end ),
[第二周]=sum(case when 周='第二周' then 数量 else 0 end ),
[第三周]=sum(case when 周='第三周' then 数量 else 0 end ),
[第四周]=sum(case when 周='第四周' then 数量 else 0 end ),
合计=sum(数量)
from @tb
group by 作者
order by 作者/*
作者 第一周 第二周 第三周 第四周 合计
---------- ----------- ----------- ----------- ----------- -----------
a 10 8 9 2 29
b 0 1 0 2 3(所影响的行数为 2 行)
*/
Drop table [tb]
Go
Create table [tb]([作者] nvarchar(1),[数量] int,[周] nvarchar(3))
Insert tb
Select 'a',10,'第一周' union all
Select 'a',8,'第二周' union all
Select 'a',9,'第三周' union all
Select 'a',2,'第四周' union all
Select 'b',1,'第二周' union all
Select 'b',2,'第四周'
Go
--Select * from tb-->SQL查询如下:
select 作者,
第一周=sum(case 周 when '第一周' then 数量 else 0 end),
第二周=sum(case 周 when '第二周' then 数量 else 0 end),
第三周=sum(case 周 when '第三周' then 数量 else 0 end),
第四周=sum(case 周 when '第四周' then 数量 else 0 end),
合计=sum(数量)
from tb
group by 作者
/*
作者 第一周 第二周 第三周 第四周 合计
---- ----------- ----------- ----------- ----------- -----------
a 10 8 9 2 29
b 0 1 0 2 3(2 行受影响)
*/
每一周下面都是0.结果不正确