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.   

    1、#t是什么意思 
    --表名
    2、a b代表什么意思? 这个语句中没有table这样的名称 
    --表的别名
    3、为什和方案一出来的结果不一样 ?
    --SQL都不一样
    4、能否解释以下这是什么意思? 
    编号=case when b.编号=a.编号 then null else a.编号 end,  
    --如果a编号=b编号,则取NULL 如果不等则取a编号
    --下面几个一样的解释
      

  2.   


     1、#t是什么意思 
    #t 表示临时表  2、a b代表什么意思? 这个语句中没有table这样的名称
    表示表的别名,代替前面的表名
      

  3.   

    楼主多看看书吧,这是MSSQL最基础的东西,多看几遍就可以看懂了