我现在有以下结果集:
作者  数量   周
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

解决方案 »

  1.   

    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 作者
      

  2.   

    SELECT 作者,
     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 作者
      

  3.   

    行列转换,参考:http://topic.csdn.net/u/20090522/16/11df6ef4-3338-44a6-9156-64d4b26527ec.html
      

  4.   

    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),
    合计=isnull(SUM(数量),0)
    from tb 
    group by 作者
      

  5.   

    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 作者
      

  6.   

    SELECT 作者,
    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 作者
    还要求合计修改
      

  7.   

    declare @tb table(作者 varchar(10),  数量 int,  周  varchar(10))insert @tb select 'a',      10    ,'第一周' 
    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 行)
    */
      

  8.   

    --> 生成测试数据表:tbIf not object_id('[tb]') is null
    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 行受影响)
    */
      

  9.   

    then 数量 
    每一周下面都是0.结果不正确