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

Langage SQL Discussion :

[T-SQL] La sous-requête a retourné plusieurs valeurs, pourtant ca marche sans le CASE


Sujet :

Langage SQL

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 572
    Points : 341
    Points
    341
    Par défaut [T-SQL] La sous-requête a retourné plusieurs valeurs, pourtant ca marche sans le CASE
    Bonjour,

    Le code suivant fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    declare @monparam varchar(20)
    set @monparam='1,2'
    select @monparam 
    as monpar
    ,id_foo
    ,id_bar from facts where id_foo in
     (select Param from
     fn_MVParam(@monparam,','))
    Le code suivant ne fonctionne pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    declare @monparam varchar(20)
    set @monparam='1,2'
    select @monparam 
    as monpar
    ,id_foo
    ,id_bar from facts where id_foo in
     (case when 1=1 then (select Param from
     fn_MVParam(@monparam,',')) end)
    ( Msg*512, Niveau*16, État*1, Ligne*4
    La sous-requête a retourné plusieurs valeurs. Cela n'est pas autorisé quand la sous-requête suit =, !=, <, <= , >, >= ou quand elle est utilisée en tant qu'expression. ) Pourquoi ? Comment faire si j'ai besoin de faire un CASE dans un IN ?

    a+, =)
    -=Clement=-

  2. #2
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Salut !

    Le case renvoie toujours une valeur.
    Si tu veux utiliser un case pour constituer ta liste, il faut qu'il se situe à l'intérieur de ton select.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    WHERE truc IN (
    SELECT CASE WHEN...
    FROM ...)

    (c'est ma photo)
    Paku, Paku !
    Pour les jeunes incultes : non, je ne suis pas un pokémon...

    Le pacblog : http://pacmann.over-blog.com/

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 572
    Points : 341
    Points
    341
    Par défaut
    Merci, le code suivant ne fonctionne pas non plus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    declare @monparam varchar(20)
    SET @monparam='1,2'
    SELECT @monparam 
    AS monpar
    ,id_foo
    ,id_bar FROM facts WHERE id_foo IN
     (SELECT case when 1=1 then (SELECT Param FROM
     fn_MVParam(@monparam,',')) end)
    Peux-tu détailler ta réponse stp ? Je ne comprend pas pourquoi le fait de rajouter CASE WHEN 1=1 THEN ... END change le résultat.

  4. #4
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    C'est une question de type de retour.

    Quand tu utilises CASE, c'est pour renvoyer une seule valeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT CASE WHEN Truc = 1 THEN 'Robert' ELSE 'Marcel' END
    Pourquoi ? Parce que le CASE est un élément d'un tuple, et non un ensemble de tuples. C'est peut être triste, mais c'est ainsi...

    Donc jamais tu ne peux dire "Fonction CASE, renvoie moi le résultat d'un SELECT qui a plein de lignes !"

    Alors, comment fait-on pour faire un CASE dans son SELECT ?
    Ben, on le fait dans le SELECT :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT id_bar 
    FROM facts 
    WHERE id_foo IN
     ( SELECT case when 1=1 then Param else Param end FROM
     fn_MVParam(@monparam,','))

    (c'est ma photo)
    Paku, Paku !
    Pour les jeunes incultes : non, je ne suis pas un pokémon...

    Le pacblog : http://pacmann.over-blog.com/

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 572
    Points : 341
    Points
    341
    Par défaut

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

Discussions similaires

  1. La sous-requête a retourné plusieurs valeurs.
    Par babilonman90 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 11/07/2013, 12h31
  2. Binding HS avec une requête LINQ retournant plusieurs tables
    Par abbepierre94 dans le forum Silverlight
    Réponses: 4
    Dernier message: 01/02/2011, 11h19
  3. Delete avec sous requetes qui retourne plusieurs resultats
    Par Biosox dans le forum Langage SQL
    Réponses: 3
    Dernier message: 02/07/2010, 14h55
  4. [SQL] Multiplication après requête qui donne plusieurs données en résultats
    Par Yagami_Raito dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 04/06/2007, 11h34
  5. [PL/SQL] Fonction qui retourne plusieurs valeurs
    Par Loko dans le forum Oracle
    Réponses: 2
    Dernier message: 07/12/2004, 09h43

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