2016-04-21 1 views
0

Salut, j'ai une table comme ci-dessous,SQL pour insérer plusieurs lignes

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

Je veux écrire une déclaration Insérer sql générique qui fonctionnera dans toutes les plates-formes DB.

Alors que je vais insérer une donnée similaire à ci-dessous dans une nouvelle table de ce qui précède un

valeur Nouvelle table après insertion:

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 

donc quinze lignes pour la première rangée ie (Date de fin - Date de début) et de même deux lignes pour la deuxième rangée de la table principale (Date de fin - Date de début).

+0

Vous devrez écrire une procédure pour cela qui serait légèrement différente selon le type de SQL que vous utilisez. Avez-vous un type spécifique de SQL que vous aimeriez utiliser? –

+0

Pourquoi tous ces produits dbms? Utilisez-vous vraiment tout MySQL, Oracle et Sybase ici ??? – jarlh

Répondre

0

Vous souhaitez créer une table d'intervalles, contenant tous les entiers de 0 à 9999. Vous pouvez le faire par programme:

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; 

La première fois que les pistes en boucle, il insère 2 lignes avec les valeurs 2 & 3 , puis 4 lignes etc, jusqu'à ce que la table soit pleine.

Puis vous insérez en croisant cette table avec votre table contenant les dates, et insérez (date de début + intervalles (jours)) où date de début + intervalle < = date de fin.

+0

Salut John, la date de début et la différence de date de fin peuvent atteindre jusqu'à 2000, la date de début peut être 01Apr2016 et la date de fin être 01Apr2021. Alors pensez-vous qu'il soit possible de créer une table Intervals, et aussi que la table Intervals peut être prédéfinie avec un nombre fixe de lignes. Cela peut varier de quelques centaines à 2000 ou même 3000. Aussi pouvez-vous s'il vous plaît laissez-moi savoir comment je peux créer la table Intervals avec SQL. –

+0

@SaeemAhamed - réponse mise à jour avec les informations demandées –

0

Cela sera mieux fait dans un UDTF. L'UDTF aura les valeurs d'entrée 2 et exportera la plage de dates. Cette implémentation sera similaire à Explode.