表MMM 
RouteCode  RouteName  DriveDate     Tim   ShapeCode    Amount   11   12  13   14  15  16   17 
3                   a店            2007/10/7      2           11          65    null  null null  null  null null 
3                   a店            2007/10/7      2           13          65    null  null null  null  null null 
3                   a店            2007/10/7      2           15          10    null  null null  null  null null 
4                   b店            2007/10/7      1           15           5    null  null null  null  null null 
4                   b店            2007/10/7      1           13           5    null  null null  null  null null 
4                   b店            2007/10/7      1           11           5    null  null null  null  null null 
5                   c店            2007/10/7      1           11           15   null  null null  null  null null 
5                   c店            2007/10/7      1           13           15   null  null null  null  null null 
5                   c店            2007/10/7      1           15           15   null  null null  null  null null 
3                   a店            2007/10/8      1           11           10   null  null null  null  null null 
4                   b店            2007/10/8      1           11           11   null  null null  null  null null 
变成 
RouteCode RouteName DriveDate         Tim         11     12     13      14     15    16      17 
3               a店            2007/10/7        2          65     0      65        0      10     0       0 
4               b店            2007/10/7        1          5      0       5        0      5      0       0 
5               c店            2007/10/7        1          15     15      0        15     0     15       0 
3               a店            2007/10/8        1          10     10      0        0      0      0       0 
4               b店            2007/10/8        1          11     11      0        0      0      0       0 
这些数据都是从别的表里转过来的,也就是说原表里面有什么样的ShapeCode类型的Amount就把他们转到后面的11 12列中,没有就 
显示0,实现不了显示空也可以。我已经实现了从原表里面面动态的提取ShapeCode和Amount 
现在就是把MMM表中的ShapeCode和Amount也那样实现。 
他们说是这样实现,把ShapeCode赋给变量,然后用Max语句查找后面相应的列,然后填入Amount我捉摸到现在也没有个头绪。 
神阿,救救我把

解决方案 »

  1.   

    表MMM  
    RouteCode  RouteName  DriveDate     Tim   ShapeCode Amount   11 12 13 14  15 16  17  
    3                   a店            2007/10/7      2           11          65    null  null null  null  null null  
    3                   a店            2007/10/7      2           13          65    null  null null  null  null null  
    3                   a店            2007/10/7      2           15          10    null  null null  null  null null  
    4                   b店            2007/10/7      1           15           5    null  null null  null  null null  
    4                   b店            2007/10/7      1           13           5    null  null null  null  null null  
    4                   b店            2007/10/7      1           11           5    null  null null  null  null null  
    5                   c店            2007/10/7      1           11           15   null  null null  null  null null  
    5                   c店            2007/10/7      1           13           15   null  null null  null  null null  
    5                   c店            2007/10/7      1           15           15   null  null null  null  null null  
    3                   a店            2007/10/8      1           11           10   null  null null  null  null null  
    4                   b店            2007/10/8      1           11           11   null  null null  null  null null  
    变成  
    RouteCode RouteName DriveDate       Tim         11     12     13      14     15    16      17  
    3               a店            2007/10/7        2          65     0      65        0     10      0       0  
    4               b店            2007/10/7        1          5      0       5        0      5      0       0  
    5               c店            2007/10/7        1          15     15      0        15     0     15       0  
    3               a店            2007/10/8        1          10     10      0        0      0      0       0  
    4               b店            2007/10/8        1          11     11      0        0      0      0       0  
    这些数据都是从别的表里转过来的,也就是说原表里面有什么样的ShapeCode类型的Amount就把他们转到后面的11 12列中,没有就  
    显示0,实现不了显示空也可以。我已经实现了从原表里面面动态的提取ShapeCode和Amount  
    现在就是把MMM表中的ShapeCode和Amount也那样实现。  
    他们说是这样实现,把ShapeCode赋给变量,然后用Max语句查找后面相应的列,然后填入Amount我捉摸到现在也没有个头绪。  
    神阿,救救我把
      

  2.   

    好像楼主没有表达清楚:
    如果只是去掉null为0:isnull(列名,0)
    --
    转到后面的11 12update 表
    set [11]=amount,[12]=amount
      

  3.   

    --静态SQL,即shapecode的值固定为11,12,13,14,15,16,17
    select RouteCode,RouteName,DriveDate,Tim,
      sum(case shapecode when 11 then amount else 0 end) [11],
      sum(case shapecode when 12 then amount else 0 end) [12],
      sum(case shapecode when 13 then amount else 0 end) [13],
      sum(case shapecode when 14 then amount else 0 end) [14],
      sum(case shapecode when 15 then amount else 0 end) [15],
      sum(case shapecode when 16 then amount else 0 end) [16],
      sum(case shapecode when 17 then amount else 0 end) [17]
    from mmm
    group by RouteCode,RouteName,DriveDate,Tim
      

  4.   

    --动态SQL,即你不知道shapecode的值有哪些?
    declare @sql varchar(8000)
    set @sql = 'select RouteCode,RouteName,DriveDate,Tim'
    select @sql = @sql + ' , sum(case shapecode when ''' + cast(shapecode as varchar) + ''' then amount else 0 end) [' + cast(shapecode as varchar) + ']'
    from (select distinct shapecode from mmm) as a
    set @sql = @sql + ' from mmm group by RouteCode,RouteName,DriveDate,Tim'
    exec(@sql) 
      

  5.   

    ShapeCode字段中的值不固定,是别人添加的,有多少ShapeCode和Amount就转成后面相对应的,但是ShapeCode的值决不会超出11到17这个范围
      

  6.   

    潇洒你好:
    --动态SQL,转换成了下面的
    RouteCode  RouteName        DriveDate          Tim       11      13      15
    3       a店                    2007-10-05 00:00:00.000   2     65      65       10
    3       a店                    2007-10-06 00:00:00.000   1     10      0       0
    4       b店                    2007-10-05 00:00:00.000   1     5      5       5
    4       b店                    2007-10-06 00:00:00.000   1     11      0       0
    5       c店                    2007-10-05 00:00:00.000   1     15       15       15
    但是后面的12,14,16,17没有了,又没有办法让他们带着显示空值而不用--静态SQL的方法。
    不能实现的话也没有关系,我想做到这个程度,我的技术担当也不会太为难我,只要我每天都能学到东西就行啊
    谢谢潇洒!
      

  7.   

    表bbb  无主键
    RouteCode       DriveDate             Tim       11       13      15
     3        2007-10-05 00:00:00.000 2 65 65 10
     3        2007-10-06 00:00:00.000 1 10  0  0
     4        2007-10-05 00:00:00.000 1 5  5  5
     4        2007-10-06 00:00:00.000 1 11  0  0
     5        2007-10-05 00:00:00.000 1 15 15 15
    动态填到
    空表B  没有数据显示空 ,无主键
    RouteCode      DriveDate   Tim       11   12    13   14    15   16   17
    代码   
    declare @s  varchar(4000) 
    set @s = ''--'select   '
    select @s = @s  + '['+ rtrim(ltrim(name))   +']'+ ','   from   dbo.syscolumns where id = 476580786
    set @s =  left(@s,len(@s)-1) 
    declare @strSql varchar(2000)
    set @strSql =  ' insert into  MstDeliveryShape13  ( '+  @s +  '   )  select   ' +  @s +' from bbb'
    print   @strSql
     exec (@strSql)执行时,出现列11 13 15 列名无效。列名怎么解决,有没有其他办法动态的插入数据