J'ai un scénario dans lequel je souhaite mettre à jour plusieurs colonnes de la première table à partir de plusieurs lignes de la deuxième table. Mais le cas ne se met à jour qu'à partir de la première ligne de la deuxième table.Mise à jour à l'aide de cas dans SQL Server
Toute aide pour y parvenir sans utiliser le curseur?
create table Table1 (ColA varchar(20), ColB varchar(20), ColC varchar(20))
insert into Table1 values (1, null, null)
create table Table2 (ColA varchar(20), ColB varchar(20), ColValue varchar(20))
insert into Table2 values (1, 2, 'X'), (1, 3, 'Y')
update Table1
set ColB = case
when T1.ColB = 2
then T1.ColValue
else T0.ColB
end,
ColC = case
when T1.ColB = 3
then T1.ColValue
else T0.ColC
end
from Table1 T0
inner join Table2 T1 on T0.ColA = T1.ColA
select * from Table1
En regardant le résultat, la déclaration a mis à jour que ColB
est simple, mais je vais avoir 12 à 20 colonnes où je dois valeur définie en fonction du type d'autre table. Ecrire une mise à jour pour chaque colonne n'est pas une bonne idée. –
@RAJUSAGI Mis à jour pour afficher une seule instruction. C'est pourquoi il est utile d'inclure tous les détails pertinents dans la question originale:) – mendosi
merci de la mise à jour. J'ai utilisé la même logique. le problème est la deuxième table elle-même une requête compliquée avec beaucoup de conditions. J'ai utilisé l'expression de table commune qui a été très utile dans ce cas. –