不看文字叙述了,就看我列出得结果那张2维表,
YearMonth    1A       1B     1C     2A     2B     2C     3A     3B     3C
--------------------------------------------------------------------------
  200501    43.24   48.24   Null   Null   24.12  Null   Null   Null   Null
  200502    26.12   55.24   Null   Null   29.12  Null   Null   Null   30.12以第一行数据为列: 
列[1A]=43.24    怎么来的:是表a中的第1行和第2行数据的sum(Number)
列[1B]=48.24    -------------------第3行和第5行-----------------
列[1C]=Null     ----------因为在表a中,YearMonth='200501' and CodeA='C' and CodeB='1' 
                          没有结果。所以为NUll

解决方案 »

  1.   

    to zlp321002:
    还没看明白吗?
      

  2.   

    --这样吧,我先请教另外一个SQL,也许先明白这个SQL,开始的问题就更好理解了。
    *************************
    表a:如下
    CodeA   CodeB
    ---------------
    1 A
    2 B
    1 B
    2 A
    3 A
    3 C
    ********************************
    希望得到的结果:如下
    Code
    ----------
    A1
    A2
    A3
    B1
    B2
    B3
    C1
    C2
    C3
    **********************************
    说明:就是将CodeA,CodeB两个子段先取出distinct,然后将2个子段进行组合。如在表a的[CodeB]字段中,数据C虽然只出现过一次,但[CodeA]字段总共有1,2,3种不同的数据,所以组合的结果也要有C1,C2,C3这样叙述不知道是否明白了,根据表a想得到这样的结果,怎么处理?
      

  3.   

    楼主的意思我明白,但是
    如例子所说,如果2C的数据也要用NULL列出来,那好像要用循环
    期待高手...
      

  4.   

    --能实现,不过效率不高
    --建测试环境
    create table b(YearMonth char(6),Number numeric(10,2),CodeA char(1),CodeB char(1))insert a select   '200501',         21.12,        'A',           1
    insert a select   '200501',         22.12,        'A',           1
    insert a select   '200501',         23.12,        'B',           1
    insert a select   '200501',         24.12,        'B',           2
    insert a select   '200501',         25.12,        'B',           1
    insert a select   '200502',         26.12,        'A',           1
    insert a select   '200502',         27.12,        'B',           1
    insert a select   '200502',         28.12,        'B',           1
    insert a select   '200502',         29.12,        'B',           2
    insert a select   '200502',         30.12,        'C',           3--执行查询
      declare @sql varchar(6000)
      set @sql = 'select YearMonth,'
      select @sql = @sql +' ['+ CodeB+CodeA +']=sum(case CodeB+CodeA when '''+ CodeB+CodeA +''' then Number else NULL end),' from  (select * from a union select distinct YearMonth,0 Number,CodeA,CodeB1 CodeB from  (select a.YearMonth,a.CodeA,a.CodeB,b.YearMonth YearMonth1,b.CodeA CodeA1,b.CodeB CodeB1 from a,(select  YearMonth,CodeA,CodeB from a) b) c ) d group by CodeB,CodeA order by CodeB
      set @sql = left(@sql,len(@sql)-1) +' from a group by YearMonth '
      exec(@sql)--结果
    YearMonth   1A     1B      1C        2A      2B       2C       3A    3B     3C     
    --------- ------ -------   -------  ------- -------  -----   ----- -----  -------
    200501  43.24 48.24 NULL NULL 24.12 NULL   NULL   NULL   NULL
    200502  26.12 55.24 NULL NULL 29.12 NULL   NULL   NULL   30.12
      

  5.   


    --建测试环境的表名应该是a
    create table a(YearMonth char(6),Number numeric(10,2),CodeA char(1),CodeB char(1))
      

  6.   

    --语句简化一点--执行查询
      declare @sql varchar(6000)
      set @sql = 'select YearMonth,'
      select @sql = @sql +' ['+ CodeB+CodeA +']=sum(case CodeB+CodeA when '''+ CodeB+CodeA +''' then Number else NULL end),' from  (select * from a union select distinct a.YearMonth,0 Number,a.CodeA,b.CodeB from a,a b) c group by CodeB,CodeA order by CodeB
      set @sql = left(@sql,len(@sql)-1) +' from a group by YearMonth '
      exec(@sql)