Legen Sie Zeilen auf der Grundlage der Anzahl der verschiedenen Werte in einer anderen Tabelle in SQL ein

Ich habe einen Tisch mit PO #, Days_to_travel und Days_warehouse Felder. Ich nehme die verschiedenen Days_in_warehouse-Werte in die Tabelle und füge sie in eine temp-Tabelle ein. Ich möchte ein Skript, das alle Werte im Feld Days_in_warehouse aus der temp-Tabelle in die Zeile Days_in_warehouse_batch in Tabelle 1 durch PO # einfügt, um die PO-datasätze zu duplizieren, bis alle POs einen datasatz pro deutlichen Wert haben. Beispiel: Temp-Tabelle: (Enthält nur ein Feld mit allen verschiedenen Werten in Tabelle 1)

Days_in_warehouse 20 30 40 

Tabelle 1 :

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

Aktualisiert Tabelle 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 

Irgendwelche Ideen, wie kann ich Tabelle 1 aktualisieren, um die gewünschten Ergebnisse zu sehen?

Ich würde folgendes vorschlagen:

 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; 

Was du suchst, ist das cartesian product zwischen deinen beiden Tischen.

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

Der einfachste path, den ich an die Aktualisierung von table1 mit diesen Werten denken kann, ist, sie einzufügen und dann die Originale zu löschen.

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

Und dann löschen Sie die Originale:

 delete from table1 where daysinwarehousebatch is null 
  • SQL Fiddle Demo

Ein weiterer path ohne TEMP-Tisch und 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