原表:-----------------------------------代码    费用类别    数量    金额
001     a           100     200
001     b           110     320
002     a           20      120
003     a           10      90
004     b           20      100 
......
期望得到如下结果:-----------------------------代码    费用类型a_数量    费用类别a_金额    费用类别b_数量    费用类别b_金额  ......
001     100               200               110               320
002     110               320
003     10                90
004                                         20                100     

解决方案 »

  1.   

    Create Table TEST
    (代码 Varchar(6),
     费用类别 Varchar(5),
     数量 Int,
     金额 Int)
     
    Insert TEST Select '001',  'a',     100,       200
    Union All Select '001',  'b',     110,        320
    Union All Select '002',  'a',     20,        120
    Union All Select '003',  'a',     10,        90
    Union All Select '004',  'b',     20,        100
    Go 
    Declare @S Varchar(1000)
    Set @S=''
    Select @S=@S+',SUM(Case 费用类别 When '''+费用类别+''' Then 数量 Else 0 End) As 费用类型'+费用类别+'_数量' From (Select Distinct 费用类别 From TEST) A Order By 费用类别
    Select @S=@S+',SUM(Case 费用类别 When '''+费用类别+''' Then 金额 Else 0 End) As 费用类型'+费用类别+'_金额'  From (Select Distinct 费用类别 From TEST) A Order By 费用类别
    Set @S='Select 代码'+@S+' From TEST Group By 代码 Order By 代码'
    EXEC(@S)
    GO
      

  2.   


    DECLARE @s varchar(8000)
    SET @s = ''
    SELECT @s = @s 
    + ',' + QUOTENAME('费用类型' + 费用类别 + '_数量')
    + ' = SUM(CASE 费用类别 WHEN ' + QUOTENAME(费用类别, '''')
    + ' THEN 数量 ELSE 0 END)'
    + ',' + QUOTENAME('费用类型' + 费用类别 + '_金额')
    + ' = SUM(CASE 费用类别 WHEN ' + QUOTENAME(费用类别, '''')
    + ' THEN 金额 ELSE 0 END)'
    FROM(
    SELECT DISTINCT 费用类别 FROM 原表
    )A
    EXEC('
    SELECT 代码'+@s+'
    FROM 原表
    GROUP BY 代码')
      

  3.   

    簡化一點,:)
    Create Table TEST
    (代码 Varchar(6),
     费用类别 Varchar(5),
     数量 Int,
     金额 Int)
     
    Insert TEST Select '001',  'a',     100,       200
    Union All Select '001',  'b',     110,        320
    Union All Select '002',  'a',     20,        120
    Union All Select '003',  'a',     10,        90
    Union All Select '004',  'b',     20,        100
    Go 
    Declare @S Nvarchar(1000)
    Set @S=''
    Select @S=@S+N',SUM(Case 费用类别 When '''+费用类别+N''' Then 数量 Else 0 End) As 费用类型'+费用类别+N'_数量,SUM(Case 费用类别 When '''+费用类别+N''' Then 金额 Else 0 End) As 费用类型'+费用类别+N'_金额'  From TEST Group By 费用类别 Order By 费用类别
    Set @S=N'Select 代码'+@S+N' From TEST Group By 代码 Order By 代码'
    EXEC(@S)
    GO
    Drop Table TEST
      

  4.   

    都好快,我刚刚从WAR3里面切出来
      

  5.   

    哈哈!fcuandy经常玩哪个地图?
      

  6.   

    以前玩对战时玩LT和TR现在基本上只打RPG,对战太累了