--模拟数据如下直接运行
set nocount on
declare @tt table
(
Months varchar(10),
Shop_Code varchar(500),
sale_Amount varchar(50)
)
insert into @tt select '[1月]','P000349','47950'
insert into @tt select '[2月]','P000055','54520'
insert into @tt select '[2月]','P000007','58020'
insert into @tt select '[2月]','P000349','58119'
insert into @tt select '[3月]','P000055','7045'
insert into @tt select '[3月]','P000039','0'
insert into @tt select '[3月]','P000348','34156'
insert into @tt select '[4月]','P000039','67030'
insert into @tt select '[5月]','P000039','53700'select * from @tt--如何对所取数据表结构进行行列转格式如下:
---ShopCode 1月份 2月份 3月份 4月份 5月份 下面的数据ShopCode是对应的编号,而一二三45分别是对应的月份数据sale_Amount
--谢啦啊

解决方案 »

  1.   

    amout怎么是字符型,最好设计为数值的,行转列一共 12 个月,不嫌麻烦就写 12 个sum(case when ... then .. else ... end) 了
    select shopcode,sum(case when months = 1 then amount else 0 end) [1],
                  ..... 2
                  ..... 3
                  .....
    from tb
    group by shopcode
      

  2.   

    SELECT Shop_Code,
    SUM(CASE WHEN months = '[1月]' THEN sale_Amount ELSE 0 END) AS [1月],
    SUM(CASE WHEN months = '[2月]' THEN sale_Amount ELSE 0 END) AS [2月],
    SUM(CASE WHEN months = '[3月]' THEN sale_Amount ELSE 0 END) AS [3月],
    SUM(CASE WHEN months = '[4月]' THEN sale_Amount ELSE 0 END) AS [4月],
    SUM(CASE WHEN months = '[5月]' THEN sale_Amount ELSE 0 END) AS [5月],
    SUM(CASE WHEN months = '[6月]' THEN sale_Amount ELSE 0 END) AS [6月],
    SUM(CASE WHEN months = '[7月]' THEN sale_Amount ELSE 0 END) AS [7月],
    SUM(CASE WHEN months = '[8月]' THEN sale_Amount ELSE 0 END) AS [8月],
    SUM(CASE WHEN months = '[9月]' THEN sale_Amount ELSE 0 END) AS [9月],
    SUM(CASE WHEN months = '[10月]' THEN sale_Amount ELSE 0 END) AS [10月],
    SUM(CASE WHEN months = '[11月]' THEN sale_Amount ELSE 0 END) AS [11月],
    SUM(CASE WHEN months = '[12月]' THEN sale_Amount ELSE 0 END) AS [12月]
    FROM @tt
    GROUP BY Shop_Code/*
    Shop_Code 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月
    P000007 0 58020 0 0 0 0 0 0 0 0 0 0
    P000039 0 0 0 67030 53700 0 0 0 0 0 0 0
    P000055 0 54520 7045 0 0 0 0 0 0 0 0 0
    P000348 0 0 34156 0 0 0 0 0 0 0 0 0
    P000349 47950 58119 0 0 0 0 0 0 0 0 0 0*/
      

  3.   

    十分感谢不过最好是写成动态的,除啦Sum外这种写法
    如下:
    declare @all varchar(5000)
    set @all=null
    select @all = isnull(@all+',','') + Months from @tt group by Monthsprint ('select * from (select * from #View_Store) a pivot (max(sale_Amount) for Months in (' + @all + ')) b')
    怎么写