年份 季度 金额
         1991 1 15
1993 2 18
1991 3 20
1991 4 16
1992 1 22
1992 2 15写出SQL语句生成以下显示方式年份 1季度 2季度 3季度 4季度
1991 15 18 20 16
1992 20 15 0 0

解决方案 »

  1.   

    SELECT
        年份,
        SUM(CASE WHEN 季度=1 THEN 金额 ELSE 0 END) AS 季度1,
        SUM(CASE WHEN 季度=2 THEN 金额 ELSE 0 END) AS 季度2,
        SUM(CASE WHEN 季度=3 THEN 金额 ELSE 0 END) AS 季度3,
        SUM(CASE WHEN 季度=4 THEN 金额 ELSE 0 END) AS 季度4
    FROM tb
    GROUP BY 年份
      

  2.   

    -- =========================================
    -- -----------t_mac 小编-------------
       ---希望有天成为大虾---- 
    -- =========================================IF OBJECT_ID('tb') IS NOT NULL
      DROP TABLE tb
    GO
    CREATE TABLE tb(a int,jidu int,jine int)
    go
    insert into tb
    select  
    1991, 1 ,15 union all select 
    1991 ,2 ,18 union all select 
    1991 ,3 ,20 union all select 
    1991, 4, 16 union all select 
    1992 ,1 ,22 union all select 
    1992 ,2 ,15
    go
    select a as 年份,[1季度]=isnull([1],0), [2季度]=isnull([2],0),[3季度]=isnull([3],0),[4季度]=isnull([4],0)
    from tb 
    pivot(
       max(jine) for jidu in([1],[2],[3],[4])
    )p
    /*------------
    (6 行受影响)
    年份          1季度         2季度         3季度         4季度
    ----------- ----------- ----------- ----------- -----------
    1991        15          18          20          16
    1992        22          15          0           0(2 行受影响)
    -------*/
      

  3.   

    if OBJECT_ID('tb')is not null
          drop table tb
      go
    create  table tb (年份 int,季度 int,金额 int)
    insert into tb select 1991,1,15
        union all   select 1993,2,18
        union all   select 1991,3,20
        union all   select 1991,4,16
        union all   select 1992,1,22
        union all   select 1992,2,15
    declare @str nvarchar(1000)
    set @str=''
    select @str=@str+ ' , max(case when 季度 = '+cast(季度 as varchar(10)) + ' then 金额 end) [季度 '
         +cast(季度 as varchar(10)) + ']'   from 
       (select distinct 季度 from tb) tb
    select @str = ' select 年份 ' + @str + ' from tb  group by 年份'
    exec (@str)(6 行受影响)
    年份          季度 1        季度 2        季度 3        季度 4
    ----------- ----------- ----------- ----------- -----------
    1991        15          NULL        20          16
    1992        22          15          NULL        NULL
    1993        NULL        18          NULL        NULL