有一年的销售数据,是列表的,想显示成如下图的,请高手指点。想做一个横向的对比分析

解决方案 »

  1.   

    SELECT
    品牌,
    SUM (
    CASE
    WHEN 月份 = 1 THEN
    销售
    ELSE
    NULL
    END
    ) AS [1月销售],
    SUM (
    CASE
    WHEN 月份 = 2 THEN
    销售
    ELSE
    NULL
    END
    ) AS [2月销售],
    SUM (
    CASE
    WHEN 月份 = 3 THEN
    销售
    ELSE
    NULL
    END
    ) AS [3月销售]
    FROM
    销售表
    GROUP BY
    品牌
      

  2.   

    SELECT
    品牌,
    a.[1] AS [1月销售],
    a.[2] AS [2月销售],
    a.[3] AS [3月销售]
    FROM
    销售表 PIVOT (
    SUM (销售) FOR 月份 IN ([1], [2], [3])
    ) AS a
    Go
      

  3.   


    ; WITH sales(Brand,Sales,mnth) AS
    (
    SELECT 'a',11,1 UNION ALL
    SELECT 'b',22,1 UNION ALL
    SELECT 'c',21,1 UNION ALL
    SELECT 'a',22,2 UNION ALL
    SELECT 'b',33,2 UNION ALL
    SELECT 'a',43,3 UNION ALL
    SELECT 'c',24,3 UNION ALL
    SELECT 'b',21,3
    )
    SELECT * FROM sales
    PIVOT(MAX(Sales) FOR mnth IN ([1],[2],[3])) t/*
    Brand 1 2 3
    a 11 22 43
    b 22 33 21
    c 21 NULL 24
    */
      

  4.   

    月份不固定 DROP TABLE #t1     
    ; WITH sales(Brand,Sales,mnth) AS
    (
    SELECT 'a',11,1 UNION ALL
    SELECT 'b',22,1 UNION ALL
    SELECT 'c',21,1 UNION ALL
    SELECT 'a',22,2 UNION ALL
    SELECT 'b',33,2 UNION ALL
    SELECT 'a',43,3 UNION ALL
    SELECT 'c',24,3 UNION ALL
    SELECT 'b',21,6
    )
    SELECT * INTO #t1 FROM sales
    DECLARE @col NVARCHAR(1000),@sql NVARCHAR(max)    
    SELECT @col=isnull(@col+',[','[')+convert(VARCHAR, mnth)+']' FROM #t1 GROUP BY mnth
    PRINT @col
    SET @sql='select * from #t1 
    PIVOT(MAX(Sales) FOR mnth IN ('+@col+')) t
    '
    EXEC(@sql)
    /*
    Brand 1 2 3 6
    a 11 22 43 NULL
    b 22 33 NULL 21
    c 21 NULL 24 NULL
    */