1
votes

Avoir plusieurs paramètres dans une partie WHEN d'une instruction de mise à jour SQL

J'ai besoin d'écrire une instruction de mise à jour sql sans répéter le paramètre sur la partie WHEN de la requête, la requête ci-dessous fonctionne bien mais je voudrais regrouper les paramètres associés, voici à quoi ressemble la requête actuelle

UPDATE [dbo].[VIPCO_UserSTCRelation]
   SET [UserAccessId] = CASE [STC_Code]
    WHEN '841900' THEN 21
    WHEN '841300' THEN 9
    WHEN '841400' THEN 21
    WHEN '841305' THEN 21
    WHEN '846000' THEN 38
    WHEN '841002' THEN 38
    WHEN '841000' THEN 40
    WHEN '841005' THEN 40
    WHEN '841004' THEN 40
    END

par exemple, je voudrais utiliser un IN pour regrouper tous les STC appartenant à 40 ensemble, j'ai essayé la partie ci-dessous, mais pas de joie

WHEN IN ( '841000', '841005', '841004') PUIS 40


0 commentaires

3 Réponses :


1
votes
CASE
  WHEN [STC_Code] IN ('841000','841005','841004') THEN 40

0 commentaires

3
votes

Vous pouvez déplacer les conditions du cas vers la quand partie de l'expression:

UPDATE [dbo].[VIPCO_UserSTCRelation]
SET [UserAccessId] = CASE 
    WHEN [STC_Code] = '841300' THEN 9
    WHEN [STC_Code] IN ('841900', '841400', '841305') THEN 21
    WHEN [STC_Code] IN ('846000', '841002') THEN 38
    WHEN [STC_Code] IN ('841000', '841005', '841004') THEN 40
END


2 commentaires

Cher Monsieur, Pourquoi ne regroupez-vous pas la valeur 21 en un seul groupe?


@Anonymous: ah oui vous avez raison, j'ai modifié ma réponse en conséquence. Merci.



2
votes

Vous pouvez y parvenir de cette manière

UPDATE [dbo].[VIPCO_UserSTCRelation]
   SET [UserAccessId] = CASE
    WHEN [STC_Code] IN ('841900', '841400', '841305')  THEN 21
    WHEN [STC_Code] = '841300' THEN 9
    WHEN [STC_Code] IN ('846000', '841002') THEN 38
    WHEN [STC_Code] IN ('841000', '841005', '841004') THEN 40
    END


1 commentaires

Est-ce que cela répond à votre question? Faites-moi savoir si vous avez besoin d'aide @Ronny Mahlangu