IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

faire un case avec plusieurs résultats


Sujet :

Développement SQL Server

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 99
    Points : 98
    Points
    98
    Par défaut faire un case avec plusieurs résultats
    bonjour à tous,

    je cherche à faire un case dans une requête sql et affecter en fonction de la condition plusieurs résultats.

    par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT CASE
      WHEN client = 'toto'
        THEN 'boite de chocolat', '10 ans'
      WHEN client = 'titi'
        THEN 'calendrier', '5 ans'
      WHEN client = 'tata'
        THEN 'stylo', '3 ans'
      END AS cadeau, anciennete
    FROM table_analyse
    est ce que c'est faisable d'intégrer deux résultats (cadeau ET anciennete) dans un seul case ? et si oui, quelle est la syntaxe.

    je travaille sous SQL SERVER 2000.


    merci pour vos réponses.



    del.

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    A ma connaissance, ca n'est pas possible, il faudra faire deux CASE :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    SELECT
        CASE Client
            WHEN 'toto' THEN 'boite de chocolat'
            WHEN 'titi' THEN 'calendrier'
            WHEN 'tata' THEN 'stylo'
        END AS Cadeau,
        CASE Client
            WHEN 'toto' THEN '10 ans'
            WHEN 'titi' THEN '5 ans'
            WHEN 'tata' THEN '3 ans'
        END AS anciennete
    FROM table_analyse

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Points : 1 234
    Points
    1 234
    Par défaut
    Si vous atteignez un nombre important de colonnes/valeurs à renvoyer en fonction de critères identiques, il vaut alors mieux songer à l'union.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    SELECT
        'boite de chocolat' AS Cadeau,
        '10 ans' AS anciennete
    FROM table_analyse
    WHERE Client = 'toto'
    UNION ALL
    SELECT
       'calendrier' AS Cadeau,
       '5 ans' AS anciennete
    FROM table_analyse
    WHERE Client = 'titi'
    ...
    Most Valued Pas mvp

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Re,

    Il y a cependant une autre solution, en passant par une pseudo table :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT Cadeau, Anciennete
    FROM Table_analyse
    INNER JOIN (
        VALUES ('toto', 'boite de chocolat', '10 ans')
            ,('titi', 'calendrier', '5ans')
            ,('tata', 'stylo', '3 ans')
    ) AS tmp( client, cadeau, Anciennete)
        ON tmp.client = Table_analyse.client

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 99
    Points : 98
    Points
    98
    Par défaut
    je me doutais que ce n'était pas possible mais ça vaut toujours le coup de poser la question... on ne sait jamais.

    merci en tout cas pour vos réponses. (à défaut, j'avais retenu la première solution du double case).

    bonne semaine.



    del.

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Points : 1 234
    Points
    1 234
    Par défaut
    Citation Envoyé par aieeeuuuuu Voir le message
    Re,

    Il y a cependant une autre solution, en passant par une pseudo table :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT Cadeau, Anciennete
    FROM Table_analyse
    INNER JOIN (
        VALUES ('toto', 'boite de chocolat', '10 ans')
            ,('titi', 'calendrier', '5ans')
            ,('tata', 'stylo', '3 ans')
    ) AS tmp( client, cadeau, Anciennete)
        ON tmp.client = Table_analyse.client

    C'est une syntaxe pour Sql server 2008, ça.
    Mais sinon, c'est bien vu.
    Most Valued Pas mvp

  7. #7
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Citation Envoyé par Sergejack Voir le message
    C'est une syntaxe pour Sql server 2008, ça.
    Mais sinon, c'est bien vu.
    en effet, SQL Server n'integre pas cette fonctionnalité fort pratique depuis bien longtemps.

    pour des versions anterieures, il faudra donc remplacer le VALUES par une serie de SELECT... UNION ALL, ce qui rend effectivement la solution moins simple...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 10
    Dernier message: 16/07/2019, 12h07
  2. Recherchev avec plusieurs résultats possibles.
    Par solorac dans le forum Excel
    Réponses: 23
    Dernier message: 12/08/2014, 15h17
  3. Comment faire un Case sur des résultats HResult ?
    Par aityahia dans le forum Langage
    Réponses: 4
    Dernier message: 18/10/2007, 12h59
  4. Faire un "Dir" avec plusieurs extensions
    Par Invité(e) dans le forum VB 6 et antérieur
    Réponses: 14
    Dernier message: 15/05/2006, 12h19
  5. Jointure avec plusieurs résultats
    Par kemenaran dans le forum Langage SQL
    Réponses: 4
    Dernier message: 18/12/2005, 23h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo