/////////////////////////////////////////////////////////////////////////////////////////
问题一:现有表A
ID Code Number ColName
----------------------
1 aaaa 200 Num1
2 aaaa 100 Num2
3 aaaa 300 Num3
4 bbbb 100 Num1
5 bbbb 200 Num2
6 bbbb 400 Num3
7 bbbb 300 Num4
…… …… ……我想写一条SQL语句得到如下结果Code Num1 Num2 Num3 Num4
------------------------
aaaa 200 100 300 <NULL>
bbbb 100 200 400 300
…… …… ……也就是说查询结果中同类的Code有多少ColName都要作为列名列出来请问该如何写??/////////////////////////////////////////////////////////////////////////////////////////问题二:
现有表A
ID WorkID Method Number
----------------------------------------
1 1111 1 300
2 1111 1 200
3 1111 2 150
4 1111 1 400
5 2222 1 300
6 2222 2 240
7 2222 1 100
8 2222 1 400其中ID是主键自动编号
WorkID表示工号
Method表示计算方法
Number表示数量我写了一个SQL语句用来统计每个工人的合计数,如下:
select workid, sum(Number) as stat from a group by workid得到如下结果:workid stat
------------------
1111 1050
2222 1040后来加入了Method这个字段用来标示计算方法我希望在统计每条记录的时候
当Method = 1 时执行累加操作
当Method = 2 时执行递减操作最后希望可以得到如下结果:
workid stat
------------------
1111 750 (即300+200-150+400的运算结果)
2222 560 (即300-240+100+400的运算结果)请问这样的SQL语句该如何写??

解决方案 »

  1.   

    1.
    declare @T_SQL as varchar(8000)
    set @T_SQL=''
    select @T_SQL + ' sum(case when ColName=''' + ColName +''' then Number else 0 end) as ''' + ColName + ''','  from (select distinct ColName from 表A) A
    set @T_SQL='select Code,' + left(@T_SQL,len(@T_SQL)-1) + ' from A group by Code'
      

  2.   

    --也就是说查询结果中同类的Code有多少ColName都要作为列名列出来
    --请问该如何写??
    declare @s varchar
    set @s='select code'
    select @s=@s+',['+colname+']=sum(case when colname='''+colname+''' then number else 0 end) '
    from tb group by colname
    set @s=@s+' from tb group by code'
    exec(@s)
      

  3.   

    第二个:
    select workid,  
           stat=sum(case Method when 1 then Number else -Number end) 
    from a group by workid
      

  4.   

    2.
    select workid, sum(case when Method=1 then Number when Method=2 then -Number end)  as stat from a group by workid
      

  5.   

    --2.
    select workid, sum(case method when 1 then Number else -number end) as stat 
    from a group by workid
      

  6.   

    第一个:
    select Code,Num1=max(case ColName when 'Num1' then Number end),
    Num2=max(case ColName when 'Num2' then Number end),
    Num3=max(case ColName when 'Num3' then Number end),
    Num4=max(case ColName when 'Num4' then Number end)
    from 表A group by Code