2017-09-10 3 views
0

J'ai une table "WCR (l, j, W, C, R)" avec les entrées suivantes. Ici, l et j sont des clés primaires.Insérer des données dans plusieurs colonnes de la même table à partir d'une colonne d'une autre table

enter image description here

I ont pour insérer des données à partir de la colonne C de WCR dans un autre tableau C (l, C1, C2) où l est la clé primaire. Le tableau C sera la suivante -

enter image description here

Pour chaque l, j = 1 sera inséré dans C1, et j = 2 est inséré dans C2. Mais je ne peux pas généraliser les requêtes.

J'ai essayé des déclarations comme -

Insert into C Select 1, C from WCR where j=1, C from WCR where j=2; 

et dans les sous-requêtes Insérer déclaration comme -

Insert into C Values (1, Select C from WCR where j=1, Select C from WCR where j=2); 

Mais aucun d'entre eux travaille dans Vertica car il ne supporte pas les sous-requête dans Insérer déclaration et la le premier est invalide. Comment puis-je insérer efficacement les valeurs dans C?

Répondre

2

Une méthode utilise un join:

Insert into C(l, c1, c2) 
    select wcr1.l, wcr1.c, wcr2.c 
    from wcr wcr1 join 
     wcr wcr2 
     on wcr1.l = wcr2.l and wcr1.j = 1 and wcr2.j = 2; 

Une autre méthode utilise l'agrégation conditionnelle:

insert into c(l, c1, c2) 
    select l, max(case when j = 1 then c end) as c1, max(case when j = 2 then c end) 
    from wcr 
    group by l; 
+0

Merci. J'ai essayé la première déclaration. Je sais que c'est une faute de frappe, dans la deuxième ligne, il devrait être "select wcr1.l" au lieu de "select wcr1.j". La seconde fonctionne parfaitement. – user3503711