关于SQL中列变行的问题:
如下:原表结构:
  项目编号    成本类型    金额
   001          400001    1000
   001          400002    1000
   001          400003    1000
   001          400004    1000
   002          400001    1000
   002          400002    1000
   002          400003    1000
   002          400004    1000转换后表结构:
   项目编号    400001    400002   400003   4000004 
      001       (金额)     (金额)   (金额)  (金额)
      002       (金额)     (金额)   (金额)  (金额)
如何实现??????????????
妈的行转列问题:
思路................

解决方案 »

  1.   

    1. 行列转换--普通假设有张学生成绩表(CJ)如下
    Name Subject Result
    张三 语文 80
    张三 数学 90
    张三 物理 85
    李四 语文 85
    李四 数学 92
    李四 物理 82想变成 
    姓名 语文 数学 物理
    张三 80 90 85
    李四 85 92 82declare @sql varchar(4000)
    set @sql = 'select Name'
    select @sql = @sql + ',sum(case Subject when '''+Subject+''' then Result end) ['+Subject+']'
    from (select distinct Subject from CJ) as a
    select @sql = @sql+' from test group by name'
    exec(@sql)
    问题已解决
    谢谢参与
    我的100分啊
      

  2.   


    SELECT 项目编号, 
        SUM(CASE 成本类型 WHEN 400001 THEN 金额 ELSE 0 END) AS 400001,
        SUM(CASE 成本类型 WHEN 400002 THEN 金额 ELSE 0 END) AS 400002,
        SUM(CASE 成本类型 WHEN 400003 THEN 金额 ELSE 0 END) AS 400003,
        SUM(CASE 成本类型 WHEN 400004 THEN 金额 ELSE 0 END) AS 400004
    FROM Northwind.dbo.Pivot
    GROUP BY 项目编号参见sqlserver联机丛书,“交叉表查询”
      

  3.   

    如果“成本类型”是字符串类型,那么
    SUM(CASE 成本类型 WHEN 400001 THEN 金额 ELSE 0 END) AS 400001
    应该改为:
    SUM(CASE 成本类型 WHEN '400001' THEN 金额 ELSE 0 END) AS 400001注意....
      

  4.   

    对了,FROM子句里的表名应该换成你自己的那个表名..
      

  5.   


    不过用Distinct应该很慢啊