把上面相同RouteCode,DriveDate的Amount差入A表中 
变成如下所示 
RouteCode    RouteName       DriveDate        11     12      13 
3               花            2007-10-05        65     65      10 
4               草            2007-10-05        5      7       5 
5               树            2007-10-05        15     13      15 
3               木            2007-10-06        10     Null    Null 
4               石头          2007-10-06        11     Null    Null 
不知道该怎么做,太别是怎样做他们的对应关系

解决方案 »

  1.   

    给出示例看看吧,很典型的例子:
    /*-- 数据测试环境 --*/
    if exists (select * from dbo.sysobjects where id = object_id(N'[tb]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
    drop table [tb]
    GOcreate table tb(单位名称 varchar(10),日期 datetime,销售额 int)
    insert into tb
    select 'A单位','2001-01-01',100
    union all select 'B单位','2001-01-02',101
    union all select 'C单位','2001-01-03',102
    union all select 'D单位','2001-01-04',103
    union all select 'E单位','2001-01-05',104
    union all select 'F单位','2001-01-06',105
    union all select 'G单位','2001-01-07',106
    union all select 'H单位','2001-01-08',107
    union all select 'I单位','2001-01-09',108
    union all select 'J单位','2001-01-11',109/*-- 要求结果
    日期       A单位  B单位 C单位 D单位 E单位  F单位 G单位 H单位 I单位 J单位   
    ---------- ----- ----- ----- ----- ----- ----- ----  ----  ---- ------
    2001-01-01 100   0     0     0     0     0     0     0     0     0
    2001-01-02 0     101   0     0     0     0     0     0     0     0
    2001-01-03 0     0     102   0     0     0     0     0     0     0
    2001-01-04 0     0     0     103   0     0     0     0     0     0
    2001-01-05 0     0     0     0     104   0     0     0     0     0
    2001-01-06 0     0     0     0     0     105   0     0     0     0
    2001-01-07 0     0     0     0     0     0     106   0     0     0
    2001-01-08 0     0     0     0     0     0     0     107   0     0
    2001-01-09 0     0     0     0     0     0     0     0     108   0
    2001-01-11 0     0     0     0     0     0     0     0     0     109
    --*//*-- 常规处理方法*/ 
    declare @sql varchar(8000)
    set @sql='select 日期=convert(varchar(10),日期,120)'
    select @sql=@sql+',['+单位名称
    +']=sum(case 单位名称 when '''+单位名称+''' then 销售额 else 0 end)'
    from(select distinct 单位名称 from tb) a
    exec(@sql+' from tb group by convert(varchar(10),日期,120)')
      

  2.   

    update A
    set [11] = t.[11],
        [12] = t.[12],
        [13] = t.[13]
    from A,

      select RouteCode,DriveDate,
        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]
      from B
      group by RouteCode,DriveDate
    ) T
    where A.RouteCode = B.RouteCode and A.DriveDate = T.DriveDate
      

  3.   

    create table A (routcode int , routename char(10), drivedate datetime, a1 int,a2 int ,a3 int)
    insert a select 3,                   '花'   ,         '2007-10-05  00:00:00'    ,      Null   ,       Null    ,      Null  union all 
    select 4,                    ' 草' ,            '2007-10-05  00:00:00'     ,     Null    ,      Null    ,      Null  union all
    select 5,                     '树'  ,           '2007-10-05  00:00:00'     ,     Null    ,      Null     ,     Null  union all
    select 3,                    '木'   ,         '2007-10-06  00:00:00'      ,    Null     ,     Null    ,      Null union all
    select 4,                    '石头'  ,           '2007-10-06  00:00:00'      ,    Null   ,       Null ,         Null create table b (routcode int , drivedate datetime,shapcode int ,amount int )
    insert b select 3,  '2007-10-05  00:00:00',   11    ,  65  union all 
    select 4,        '2007-10-05  00:00:00' ,     11 ,     5  union all 
    select 5,        '2007-10-05  00:00:00' ,     11  ,    5  union all select 
    3,        '2007-10-05  00:00:00' ,          12   ,       65  union all select 
    4,        '2007-10-05  00:00:00' ,          12  ,        7 union all select 
    5,       '2007-10-05  00:00:00',           12   ,       13 union all select 
    3,        '2007-10-05  00:00:00',           13 ,        10 union all select 
    4,        '2007-10-05  00:00:00',           13  ,        5 union all select 
    5,        '2007-10-05  00:00:00',           13  ,       15 union all select 
    3,        '2007-10-06  00:00:00' ,          11  ,       10 union all select 
    4,        '2007-10-06  00:00:00',           11 ,        11 
    update a set a1=T.a1,a2=T.a2,a3=T.a3 from (select routcode,drivedate,sum(case shapcode when 11 then amount else 0 end )as a1 ,sum(case shapcode when 12 then amount else 0 end ) as a2,sum(case shapcode when 13 then amount else 0 end) as  a3  from b  group  by routcode,drivedate )T,A 
    where A.RoutCode = T.RoutCode and A.DriveDate = T.DriveDate
    SELECT * FROM A create table A (routcode int , routename char(10), drivedate datetime, a1 int,a2 int ,a3 int)
    insert a select 3,                   '花'   ,         '2007-10-05  00:00:00'    ,      Null   ,       Null    ,      Null  union all 
    select 4,                    ' 草' ,            '2007-10-05  00:00:00'     ,     Null    ,      Null    ,      Null  union all
    select 5,                     '树'  ,           '2007-10-05  00:00:00'     ,     Null    ,      Null     ,     Null  union all
    select 3,                    '木'   ,         '2007-10-06  00:00:00'      ,    Null     ,     Null    ,      Null union all
    select 4,                    '石头'  ,           '2007-10-06  00:00:00'      ,    Null   ,       Null ,         Null create table b (routcode int , drivedate datetime,shapcode int ,amount int )
    insert b select 3,  '2007-10-05  00:00:00',   11    ,  65  union all 
    select 4,        '2007-10-05  00:00:00' ,     11 ,     5  union all 
    select 5,        '2007-10-05  00:00:00' ,     11  ,    5  union all select 
    3,        '2007-10-05  00:00:00' ,          12   ,       65  union all select 
    4,        '2007-10-05  00:00:00' ,          12  ,        7 union all select 
    5,       '2007-10-05  00:00:00',           12   ,       13 union all select 
    3,        '2007-10-05  00:00:00',           13 ,        10 union all select 
    4,        '2007-10-05  00:00:00',           13  ,        5 union all select 
    5,        '2007-10-05  00:00:00',           13  ,       15 union all select 
    3,        '2007-10-06  00:00:00' ,          11  ,       10 union all select 
    4,        '2007-10-06  00:00:00',           11 ,        11 
    update a set a1=T.a1,a2=T.a2,a3=T.a3 from (select routcode,drivedate,sum(case shapcode when 11 then amount else 0 end )as a1 ,sum(case shapcode when 12 then amount else 0 end ) as a2,sum(case shapcode when 13 then amount else 0 end) as  a3  from b  group  by routcode,drivedate )T,A 
    where A.RoutCode = T.RoutCode and A.DriveDate = T.DriveDate
    SELECT * FROM A 
      

  4.   


    declare @t table(routecode int,routename varchar(20),drivedate datetime,[11] int,[12] int,[13] int)insert into @t
    select 3,'花','2007-10-05  00:00:00',Null,Null,Null 
    union all select 4,' 草','2007-10-05  00:00:00',Null,null,Null 
    union all select 5,' 树','2007-10-05  00:00:00',Null,Null,Null 
    union all select 3,'木 ','2007-10-06  00:00:00', Null,Null,Null 
    union all select 4,'石头','2007-10-06  00:00:00',Null,Null,Null 
    declare @b table(routecode int,drivedate datetime,shanecode int,amount int)
    insert into @b
    select 3,'2007-10-05  00:00:00',11,65 
    union all select 4,        '2007-10-05  00:00:00',           11,          5 
    union all select 5,        '2007-10-05  00:00:00',           11,          15
    union all select 3,        '2007-10-05  00:00:00',           12,          65
    union all select 4,        '2007-10-05  00:00:00',           12,          7 
    union all select 5,        '2007-10-05  00:00:00',           12,          13 
    union all select 3,        '2007-10-05  00:00:00',           13,          10 
    union all select 4,        '2007-10-05  00:00:00',           13,          5 
    union all select 5,        '2007-10-05  00:00:00',           13,          15
    union all select 3,        '2007-10-06  00:00:00',           11,          10 
    union all select 4,        '2007-10-06  00:00:00',           11,          11 
    select routecode,drivedate,max(case shanecode when 11 then amount else null end) [11],
       max(case shanecode when 12 then amount else null end) [12],
       max(case shanecode when 13 then amount else null end) [13]
    into #tab from @b group by routecode,drivedate
     
    update  b set b.[11]=a.[11],b.[12]=a.[12],b.[13]=a.[13] from @t b, #tab a where b.routecode=a.routecode and b.drivedate=a.drivedate
    drop table #tab
    select * from @t
      

  5.   

    潇洒,那样不行,不能用
    update A 
    set [11] = t.[11], 
        [12] = t.[12], 
        [13] = t.[13] 
    from A
    这种方式,象他gaojier1000那样转换,我明白列 gaojier1000那个例子,但是我不知道怎么把那些列合并,因为我的那个
    表B没有哪一列数据是完全固定的
      

  6.   

    表A中的列11  12   13
    和表B中的Shape列都是动态生成的,以后可能还要改正,但是不能改存储过程
    思路应该和gaojier1000的差不多那样做出来
      

  7.   

    B表中ShapeCode还可能加上其他的类型,如14,15等等,A表是个临时表,我跟据另外一个表生成的,
    只要添加新的ShapeCode,A表就会自动加入他的列中,所以关键是B表怎么再出现新的ShapeCode类型的怎么填入A中