create   table   table1(   
  编号             int,   
  产品名称     varchar(10),   
  定购数量     int,   
  金额             int)   
    
  insert   into   table1   select   1,'a1',100,100   
  insert   into   table1   select   1,'a2',80   ,160   
  insert   into   table1   select   1,'a3',50   ,10   
  insert   into   table1   select   2,'b1',1     ,100   
  insert   into   table1   select   2,'b2',18   ,180   
    
    
  create   table   table2(   
  编号             int,   
  产品名称     varchar(10),   
  交付时间     datetime,   
  交付数量             int)   
    
    
  insert   into   table2   select   1,'a1','2003-01-01',50   
  insert   into   table2   select   1,'a1','2004-01-01',50   
方安一:
  select     
          identity(int,1,1)   as   id,   
          a.*,   
          b.交付时间,   
          b.交付数量   
  into     
          table89  
  from     
          table1   a   
  left   join   
          table2   b   
  on   
          a.编号   =   b.编号   and   a.产品名称   =   b.产品名称   
          
          
          
ID 编号         产品名称     定购数量,金额           交付时间             交付数量
1  1        a1              100       100       2003-01-01 00:00:00.000    50
2  1        a1              100       100       2004-01-01 00:00:00.000    50
3  1        a2              80         160         NULL                     NULL
4  1         a3              50         10         NULL                     NULL
5  2        b1              1         100         NULL                     NULL
6  2         b2              18         180         NULL                      NULL
 
方案二:                
          
select     
          编号=case when b.编号=a.编号 then null else a.编号 end,   
          产品名称=case when b.产品名称=a.产品名称 then null else a.产品名称 end,   
          定购数量=case when b.产品名称=a.产品名称 and b.定购数量=a.定购数量 and b.金额=a.金额 then null else a.定购数量 end,   
          金额=case when b.产品名称=a.产品名称 and b.定购数量=a.定购数量 and b.金额=a.金额 then null else a.金额 end,   
          a.交付时间,   
          a.交付数量   
  into   table88  
  from   
          #t   a   
  left   join   
          #t   b   
  on   
          a.id   =   b.id+1   
  order   by   
          a.id  
          
          问题:
          
          1、#t是什么意思
          2、a b代表什么意思? 这个语句中没有table这样的名称
          3、为什么和方案一出来的结果不一样
          4、能否解释以下这是什么意思?
          编号=case when b.编号=a.编号 then null else a.编号 end,   
          产品名称=case when b.产品名称=a.产品名称 then null else a.产品名称 end,   
          定购数量=case when b.产品名称=a.产品名称 and b.定购数量=a.定购数量 and b.金额=a.金额 then null else a.定购数量 end,   
          金额=case when b.产品名称=a.产品名称 and b.定购数量=a.定购数量 and b.金额=a.金额 then null else a.金额 end,   
          a.交付时间,   
          a.交付数量   
       
       
 编号         产品名称     定购数量, 金额           交付时间             交付数量   
1               a1          100     100      2003-01-01 00:00:00.000     50
NULL            NULL        NULL     NULL     2004-01-01 00:00:00.000     50
NULL           a2            80        160         NULL                   NULL
NULL           a3            50        10           NULL                   NULL
2              b1            1        100          NULL                   NULL
NULL           b2            18        180          NULL                   NULL

解决方案 »

  1.   

    #t 根本就没有 ,你哪里抄来的语句?  
    a b是别名
      

  2.   

    "2、a b代表什么意思? 这个语句中没有table这样的名称 "
    --a,b 是表的别名
      

  3.   

    "编号=case when b.编号=a.编号 then null else a.编号 end"
    -- 是判断选择语句当b.编号=a.编号是该列置为null 否则该列值为a.编号 
      

  4.   

    1、#t是什么意思 
    临时表
    2、a b代表什么意思? 这个语句中没有table这样的名称
    表别名 
    3、为什么和方案一出来的结果不一样 
    看得有点晕  自己去测试下
    4、能否解释以下这是什么意思? 查case when 的用法 一般用与判断和行转列