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] instruction CASE dans clause WHERE


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 9
    Par défaut [t-sql] instruction CASE dans clause WHERE
    Bonjour,


    voila ce que j'essaye de faire :

    ALTER FUNCTION [dbo].[CAExportSelectAll]
    (
    @CodeLabel nvarchar(255)
    )
    RETURNS TABLE
    AS
    RETURN
    (
    SELECT CodeLabel
    FROM CAExportPreSelect
    WHERE (CASE WHEN @CodeLabel = 'CLASSIQUE' THEN CodeLabel='NV' ELSE CodeLabel='MT' END)
    )
    cela ne fonctionne pas :/
    est ce que quelqu'un voit ou est l'erreur ?
    merci beaucoup.

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Par défaut
    Apparemment, vous travaillez sur SQL Server - ça aurait été bien que vous le précisiez, tout comme votre message d'erreur - que je connais pas.

    Ceci dit, j'ai beaucoup de mal à déterminer pourquoi vous utilisez la structure CASE dans la clause WHERE de cette manière.
    Qu'essayez de vous faire via cette structure ?

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 9
    Par défaut
    Citation Envoyé par Magnus
    Apparemment, vous travaillez sur SQL Server - ça aurait été bien que vous le précisiez, tout comme votre message d'erreur - que je connais pas.

    Ceci dit, j'ai beaucoup de mal à déterminer pourquoi vous utilisez la structure CASE dans la clause WHERE de cette manière.
    Qu'essayez de vous faire via cette structure ?
    Merci de votre aide.
    Toutes mes excuses, effectivement je travaille sur Sql Server 2005.
    Le message d'erreur était : Syntaxe incorrecte vers '='

    J'ai touvé l'erreur de syntaxe, ce code fonctionne :
    ALTER FUNCTION [dbo].[CAExportSelectAll]
    (
    @CodeLabel nvarchar(255)
    )
    RETURNS TABLE
    AS
    RETURN
    (
    SELECT CodeLabel
    FROM CAExportPreSelect
    WHERE (CodeLabel = CASE WHEN @CodeLabel = 'CLASSIQUE' THEN 'NV' ELSE 'MT' END)
    )
    maintenant j'ai un autre problème

    Ce que j'essaye de faire c'est construire une clause WHERE differente suivant un paramètre.

    Par exemple si mon paramêtre est 'CLASSIQUE' je veux filtrer les labels dit 'classiques' (rien ne les identifie dans la bdd, je doit en écrire la liste "en dur"), ma clause WHERE doit donc être "WHERE CodeLabel = 'NV' Or CodeLabel = 'NT' Or CodeLabel='NX'"

    Dans mon SQL j'ai donc essayé :

    ALTER FUNCTION [dbo].[CAExportSelectAll]
    (
    @CodeLabel nvarchar(255)
    )
    RETURNS TABLE
    AS
    RETURN
    (
    SELECT CodeLabel
    FROM CAExportPreSelect
    WHERE (CodeLabel = CASE WHEN @CodeLabel = 'CLASSIQUE' THEN ('NV' Or 'NT Or 'NX') ELSE 'MT' END)
    )
    qui me donne l'erreur : Syntaxe incorrecte vers le mot clé 'OR'.

    et

    ALTER FUNCTION [dbo].[CAExportSelectAll]
    (
    @CodeLabel nvarchar(255)
    )
    RETURNS TABLE
    AS
    RETURN
    (
    SELECT CodeLabel
    FROM CAExportPreSelect
    WHERE (CodeLabel = CASE WHEN @CodeLabel = 'CLASSIQUE' THEN (CodeLabel='NV' Or CodeLabel='NT Or CodeLabel='NX') ELSE 'MT' END)
    )
    qui me donne l'erreur : Syntaxe incorrecte vers '='

    Je sens que je ne suis pas couché aujourd'hui !

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2005
    Messages : 68
    Par défaut
    Ce serait pas plus simple un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    ALTER FUNCTION [dbo].[CAExportSelectAll] 
    ( 
    @CodeLabel nvarchar(255)
    )
    RETURNS TABLE 
    AS
    IF @CodeLabel = 'CLASSIQUE' 
    BEGIN
    RETURN 
    (
    SELECT CodeLabel
    FROM CAExportPreSelect
    WHERE CodeLabel IN('NV', 'NT', 'NX')
    )
    END
    ELSE
    BEGIN
    RETURN 
    (
    SELECT CodeLabel
    FROM CAExportPreSelect
    WHERE CodeLabel = 'MT'
    )
    END
    ??

  5. #5
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 133
    Par défaut
    Ou comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    ALTER FUNCTION [dbo].[CAExportSelectAll] 
    ( 
    @CL nvarchar(255)
    )
    RETURNS TABLE 
    AS
    BEGIN
    RETURN 
    (
    SELECT CodeLabel
    FROM  CAExportPreSelect
    WHERE  ( CodeLabel IN('NV', 'NT', 'NX') 
      AND @CL = 'CLASSIQUE'
      )
     OR ( CodeLabel = 'MT'
      AND @CL <> 'CLASSIQUE'
      )
    )
    END
    PS : En utilisant des noms de variables différents des noms de colonne, on améliore la lisibilité du code
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

Discussions similaires

  1. Procédure stockée : clause CASE dans mon WHERE ?
    Par ridokou dans le forum Développement
    Réponses: 5
    Dernier message: 27/05/2011, 13h55
  2. CASE WHEN dans clause WHERE
    Par SpaceFrog dans le forum Requêtes
    Réponses: 13
    Dernier message: 20/11/2009, 14h23
  3. Réponses: 0
    Dernier message: 27/07/2009, 15h02
  4. [PL/SQL Oracle] Syntaxe dans clause where
    Par Misdrhaal dans le forum Oracle
    Réponses: 2
    Dernier message: 01/03/2006, 13h33
  5. INNER JOIN ... ON ... ou jointure dans clause where
    Par schmur1 dans le forum MS SQL Server
    Réponses: 12
    Dernier message: 28/06/2005, 09h16

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