declare @sql varchar(8000)
set @sql='select 年度,月份,货号'
select @sql=@sql+',sum(case 大小 when '''+大小+''' then 库存 else 0 end) ['+大小+']'
from (select distinct 大小 from tablename) a
select @sql=@sql+',sum(库存) as 合计 from tablename group by 年度,月份,货号'
exec(@sql)

解决方案 »

  1.   

    declare @sql varchar(8000)
    set @sql='select 年度,月份,货号'
    select @sql=@sql+',sum(case 大小 when '+大小+' then 库存 else 0 end) ['+大小+']'
    from (select distinct 大小 from tablename) a
    select @sql=@sql+',sum(库存) as 合计 from tablename group by 年度,月份,货号'
    exec(@sql)
      

  2.   

    declare @sql varchar(8000)
    set @sql='select 年度,月份,货号'
    select @sql=@sql+',sum(case 大小 when '''+cast(大小 as varchar(10))+''' then 库存 else 0 end) ['+大小+']'
    from (select distinct 大小 from tablename) a
    select @sql=@sql+',sum(库存) 合计 from tablename group by 年度,月份,货号'
    exec(@sql)
      

  3.   

    年度 月份 货号       大小  库存
    2003 10 3316-1       22     0
    2003 10 3316-1       23     19
    2003 10 3316-1       24     20
    2003 10 3316-1       25     36
    2003 10 3316-1       26     34
    2003 10 3316-1       27     4
    2003 10 3316-1       28     15
    2003 10 3316-1       29     3
    显示为:
    年度 月份 货号    22  23  24 25  26  27    28 29  合计
    2003 10 3316-1      0 19  20   36  34   4   15    3   121其中大小字段是存在变化的。 
    我该如何实现?  
    谢谢!
    drop table #aicreate table #ai(年度 int, 月份 tinyint  ,货号 varchar(1000),      大小 int, 库存 int)
    insert into #ai select 2003, 10, '3316-1',       22     ,0
    insert into #ai select 2003, 10, '3316-1',       23     ,19
    insert into #ai select 2003, 10, '3316-1' ,      24    , 20
    insert into #ai select 2003, 10, '3316-1' ,      25   ,  36
    insert into #ai select 2003, 10, '3316-1' ,      26  ,   34
    insert into #ai select 2003, 10, '3316-1'  ,     27     ,4
    insert into #ai select 2003, 10, '3316-1' ,      28 ,    15
    insert into #ai select 2003, 10, '3316-1'   ,    29,     3
    go
    declare @sql varchar(8000)
    select @sql='select 年度,月份,货号,'
    select @sql=@sql+'sum(case when 大小='+dx+' then 库存 end) ['+dx+'],'
    from (select distinct convert(varchar(1000),大小) dx from #ai) a
    select @sql=left(@sql,len(@sql)-1)
    select @sql=@sql+' from #ai group by 年度,月份,货号'
    print @sql
    execute (@sql)
      

  4.   

    带合计的declare @sql varchar(8000)
    select @sql='select 年度,月份,货号,'
    select @sql=@sql+'sum(case when 大小='+dx+' then 库存 end) ['+dx+'],'
    from (select distinct convert(varchar(1000),大小) dx from #ai) a
    select @sql=@sql+'sum(库存) 合计 from #ai group by 年度,月份,货号'
    print @sql
    execute (@sql)
      

  5.   

    declare @sql varchar(8000)
    set @sql='select 年度,月份,货号'
    select @sql=@sql+',sum(case 大小 when '''+cast(大小 as varchar(10))+''' then 库存 else 0 end) ['+cast(大小 as varchar(10))+']'
    from (select distinct 大小 from tablename) a
    select @sql=@sql+',sum(库存) 合计 from tablename group by 年度,月份,货号'
    exec(@sql)
      

  6.   

    declare @sql varchar(8000)
    set @sql='select 年度,月份,货号'
    select @sql=@sql+',sum(case 大小 when '''+cast(大小 as varchar(10))+''' then 库存 else 0 end) ['+大小+']'
    from (select distinct 大小 from tablename) a
    select @sql=@sql+',sum(库存) 合计 from tablename group by 年度,月份,货号'
    exec(@sql)
      

  7.   

    第 1 行: 'when' 附近有语法错误。
      

  8.   

    pengdali(大力 V3.0): 第 1 行: 'when' 附近有语法错误。
      

  9.   

    pengdali(大力 V3.0):我知道了,是我的Sql超过8000字节。
    我的问题有点不同,我的大小要取一部份,位置是定的:
    2003 10 3316-1       A22     0
    2003 10 3316-1       A23     19
    2003 10 3316-1       A24     20
    2003 10 3316-1       A25     36
    2003 10 3316-2       B22     34
    2003 10 3316-2       B23     4
    2003 10 3316-2       B24     15
    2003 10 3316-2       B26     3
    年度 月份 货号    22  23  24 25  26  合计
    2003 10 3316-1      0 19  20   36   0   75
    2003 10 3316-2      34 4   15    0   3   56