2017-08-31 4 views
1

J'essaie d'ajouter une valeur de colonne à mon instruction insert/select actuelle, mais je ne suis pas sûr de pouvoir utiliser une clause CASE WHEN ou si Je dois le faire d'une autre manière.Insérer une valeur d'une autre table basée sur la différence de deux autres valeurs de colonne

Fondamentalement, j'ai une colonne de numéros de téléphone dans ma table principale. J'ai besoin d'insérer un numéro à partir d'une autre table, mais l'autre table a 2 colonnes de numéros de téléphone différentes en fonction du type d'appel. Par exemple:

CALLINGPARTYNO | FINALLYCALLEDPARTYNO | CALLTYPE 
------------------------------------------------ 
1234567890  0987654321    1 
0987654321  1234567890    2 

Alors ce que je dois faire est de dicter le choix numéro est mis dans ma colonne phoneNumber dans le tableau 1. Si le type d'appel est 1, je veux insérer le numéro du FINALLYCALLEDPARTYNO mais si le type d'appel est 2, je veux insérer le numéro de CALLINGPARTYNO.

code pseudo si elle aide:

Insert into table1(phoneNumber) 
SELECT case when /*if calltype = 1, then select FINALLYCALLEDPARTYNO*/ 
    ELSE /*if calltype=2 then select CALLINGPARTYNO */ as phoneNumber 

from table2; 

Est-il possible de le faire avec CASE ou est-il une autre façon? Je cherche le moyen le plus idéal de le faire pour que je puisse l'ajouter dans une instruction d'insertion beaucoup plus grande.

Répondre

2

Vous pouvez utiliser toutes les constructions syntaxiques que vous pouvez utiliser dans une instruction select dans une instruction d'insertion de sélection:

INSERT INTO table1(phoneNumber) 
SELECT CASE calltype WHEN 1 THEN finallycalledpartyno 
        WHEN 2 THEN callingpartyno 
     END 
FROM table2 
+0

Parfait, je vous remercie! Puisque, je le fais dans une rangée avec d'autres valeurs choisies, puis-je ajouter '' '' phoneNumber''' à l'instruction '' '' 'END'''? –

+1

@TomN. Oui. Tout dans 'CASE ... END' est une grande expression longue, vous pouvez lui appliquer un nom comme vous le feriez avec n'importe quelle autre colonne. – rutter

+0

@TomN. Oui, vous pouvez. L'ensemble 'case ... end' est une expression unique (quoique complexe). Notez que l'ajout d'un tel alias vous aidera simplement à lire la requête plus facilement. Il n'a aucun effet fonctionnel (en supposant que votre requête n'a pas un tas d'autres parties qui utilisent réellement cet alias directement). – Mureinik