2014-05-21 38 views
1

我有一个包含PO#,Days_to_travel和Days_warehouse字段的表。我将表中不同的Days_in_warehouse值插入到临时表中。我需要一个脚本,它将从Temp表中的Days_in_warehouse字段中的所有值插入到表1中的Days_in_warehouse_batch行中,复制PO记录,直到所有PO都有不同值的记录。 实施例: 温度表:(只包含一个场与表1中的所有不同的值)根据SQL中另一个表中不同值的数量插入行

Days_in_warehouse 
     20 
     30 
     40 

表1:

PO# Days_to_travel Days_in_warehouse Days_in_warehouse_batch 
1  10    20    
2   5    30 
3   7    40 

更新表1:

PO# Days_to_travel Days_in_warehouse Days_in_warehouse_batch 
1  10    20     20 
1  10    20     30 
1  10    20     40 
2   5    30     20 
2   5    30     30 
2   5    30     40 
3   7    40     20 
3   7    40     30 
3   7    40     40 

任何想法至于如何更新表1以查看期望的结果?

回答

0

另一种方式没有TEMP表的d DELETE。

UPDATE T SET [Days_in_warehouse_batch] = [Days_in_warehouse]; 

INSERT INTO T ([PO], [Days_to_travel], 
       [Days_in_warehouse], [Days_in_warehouse_batch]) 
    SELECT T.PO, 
      T.Days_to_travel, 
      T.Days_in_warehouse, 
      DAYS_Table.Days_in_warehouse 
    FROM T 
    CROSS JOIN 
      (SELECT DISTINCT Days_in_warehouse FROM T) as DAYS_Table 
    WHERE T.Days_in_warehouse <> DAYS_Table.Days_in_warehouse; 

SQLFiddle demo

0

你要找的是两张表格之间的cartesian product

select t1.po, t1.daystotravel, t1.daysinwarehouse, temp.daysinwarehousebatch 
from table1 t1, temp 

我能想到用这些值更新table1的最简单方法是插入它们,然后删除原件。

insert into table1  
select t1.po, t1.daystotravel, t1.daysinwarehouse, temp.daysinwarehousebatch 
from table1 t1, temp 

,然后删除原稿:

delete from table1 where daysinwarehousebatch is null 
0

我建议如下:

insert into table1(PO#, Days_to_travel, Days_in_warehouse, Days_in_warehouse_batch) 
    select PO#, Days_to_travel, Days_in_warehouse, Days_in_warehouse 
    from table1 cross join 
     (select 20 as Days_in_warehouse union all select 30 union all select 40) var 
    where Days_in_warehouse_batch is null; 

delete from table1 
    where Days_in_warehouse_batch is null; 
相关问题