2016-04-21 18 views
0

Hallo Ich habe eine Tabelle, wie unten haben,SQL mehrere Zeilen einfügen

Id  StartDt   EndDt  
----- --------   ------- 
123  01-Apr-2016  15-Apr-2016 
456  02-Apr-2016  03-Apr-2016 

ich eine generische SQL-Anweisung INSERT schreiben wollen, die in allen DB-Plattformen arbeiten.

So dass ich ein ähnlichen Daten wie unten in eine neue Tabelle von oben einem

New Tabellenwert nach Einfügen einfügen werde:

Id  Date   SeqNo 
123  01-Apr-2016  1 
123  02-Apr-2016  2 
123  03-Apr-2016  3 
123  04-Apr-2016  4 
123  05-Apr-2016  5 
123  06-Apr-2016  6 
123  07-Apr-2016  7 
123  08-Apr-2016  8 
.. 
.. 
.. 
.. 
123  15-Apr-2016  15, 


AssignmentID Date SeqNo 
123 1-Apr 1 
123 2-Apr 2 
123 3-Apr 3 
123 4-Apr 4 
123 5-Apr 5 
.  
.  
.  
.  
.  
123 15-Apr 15 

So fünfzehn Zeilen für die erste Zeile dh (Enddatum - Startdatum) und ähnlich zwei Zeilen für die zweite Zeile aus der Haupttabelle (Enddatum - Startdatum).

+0

Sie müssten hierfür eine Prozedur schreiben, die je nach verwendetem SQL-Typ leicht unterschiedlich ist. Haben Sie einen bestimmten SQL-Typ, auf den Sie ausgerichtet sein möchten? –

+0

Warum all diese dbms-Produkte? Verwenden Sie wirklich alle MySQL, Oracle und Sybase hier ??? – jarlh

Antwort

0

Sie würden eine Intervalle Tabelle erstellen, alle Zahlen von 0 bis 9999. enthalten, Sie können dies programmatisch tun:

CREATE TABLE intervals (period int); 
INSERT INTO intervals (period) VALUES (0),(1); 
DECLARE @rowCnt int; 
SELECT @rowCnt = 2; 
WHILE (SELECT Count(*) FROM intervals) < 10000 BEGIN 
    INSERT INTO intervals (period) SELECT period + @rowCnt FROM intervals WHERE period + @rowCnt < 10000; 
    SELECT @rowCnt = @rowCnt * 2 
END; 

Das erste Mal, wenn die Schleife läuft, fügt er zwei Reihen mit den Werten 2 & 3 , dann 4 Zeilen usw., bis der Tisch voll ist.

Dann fügen Sie ein, indem Sie diese Tabelle mit Ihrer Tabelle, die Datumsangaben enthält, verbinden und einfügen (Anfangsdatum + Intervalle (Tage)), wobei Startdatum + Intervall < = Enddatum ist.

+0

Hi John, Die Differenz zwischen Startdatum und Enddatum kann bis zu 2000 erreichen, d. H. Das Startdatum kann 01. April 2016 und das Enddatum 01. April2021 sein. Sie können also eine Intervals-Tabelle erstellen und auch die Intervals-Tabelle mit einer festen Anzahl von Zeilen voreinstellen. Dies kann von wenigen 100 bis 2000 oder gar 3000 reichen. Sie können mir auch mitteilen, wie ich die Intervals-Tabelle mit SQL erstellen kann. –

+0

@SaeemAhamed - aktualisierte Antwort mit angeforderten Informationen –

0

Dies wird am besten in einem UDTF getan. Die UDTF wird die Werte von Eingang 2 haben und den Datumsbereich exportieren. Diese Implementierung wird ähnlich zu Explode sein.

Verwandte Themen