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

MS SQL Server Discussion :

PB Case When


Sujet :

MS SQL Server

  1. #1
    Candidat au Club
    Inscrit en
    Mai 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 10
    Points : 4
    Points
    4
    Par défaut PB Case When
    Bonjour a tous,
    alors voila je suis depuis ce matin 10h sur une requete a la c... qui me permet pas davancer.

    Posons l'environnement dans un premier temps:
    J'ai des produits (qui possedent un ID (IDPRDT) et une nature (IDNTCT))
    Ces produits sont rataché a des contrats (qui pareil on un id (IDCTRT) une reference (REFCTR) et une date de cloture (DATCLO))
    A une reference peut correspondre 2 contrats , la difference se fera au niveau du produit associé et de la nature.
    A partir de la reference du contrat, je voudrais pouvoir récupérer l'id du produit en sachant que dans le cas de 2 contrats sous la meme reference, si la date de cloture du 1er est non nulle, j'obtiens le second (grace a idntct=3), et si les 2 sont a non null j'obtiens le 1er.

    Voila la requete qui fonctionne le mieux (enfin facon de parler)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT P2.IDNTCT FROM AVPDTS AS P2 INNER JOIN AVCTRT AS C2 ON C2.IDPRDT = P2.IDPRDT
    WHERE REFCTR = '86900070' AND P2.IDNTCT =
    (CASE WHEN C2.DATCLO is not null THEN 3 
    ELSE (SELECT IDNTCT FROM AVPDTS
            INNER JOIN AVCTRT ON VPDTS.IDPRDT = AVCTRT.IDPRDT
            WHERE REFCTR = '86900070' AND IDNTCT <> 3)
    END )
    alors cette requete va bien me retourner la 1ere valeur dans le cas de 2 dates nulles de contrat ms si la 1ere est nulle alor rien n'est remonté
    j'ai l'impression que le case ne se fait pas correctement car quand jessaie la requete avec des valeurs statiques a la palce du case ca passe
    je vous prierais de ne pas me renvoyé vers des liens Case When pour les newbies ou autres, g fait le tour du net sans pouvoir trouver la solution.
    Enfin voila
    toute aide est la bienvenue, car a force de chercher et de m'arracher les cheveux , on commence par m'appeler zidane (tu me diras ete considéré comme dieu ca pa si mal , tant que c'est pas Sim )

    j'espere que vous aurez a peu pres saisi le pb (javoue que moi ossi jme suis perdu en ecrivant ce mail)

    Merci

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 434
    Points : 502
    Points
    502
    Par défaut
    Citation Envoyé par faflenrage
    ps: desole pour l'indentage mais jariv pas a m'en servir
    Ben t'utilise la balise CODE et ca donne
    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
     
    SELECT P2.IDNTCT 
    FROM AVPDTS AS P2 INNER JOIN AVCTRT AS C2 ON C2.IDPRDT = P2.IDPRDT
    WHERE REFCTR = '86900070' 
    AND P2.IDNTCT =
    (CASE WHEN C2.DATCLO is not null THEN 3 
    ELSE (
    SELECT IDNTCT 
    FROM AVPDTS 
    INNER JOIN AVCTRT ON 
    AVPDTS.IDPRDT = AVCTRT.IDPRDT 
    WHERE REFCTR = '86900078' 
    AND IDNTCT <> 3)
    END 
    )
    c'est mieux non ?

    Ceci dit j'ai rien compris à ton histoire :
    1- d'ou sort
    Citation Envoyé par faflenrage
    "grace a idntct=3"
    ?
    2-
    Citation Envoyé par faflenrage
    et si les 2 sont a non null j'obtiens le 1er.
    : premier par rapport à quoi ?
    3- Pourquoi ta référence contrat de test n'a pas la même valeur dans les deux closes where ? ('86900070' et '86900078' ) ?

  3. #3
    Candidat au Club
    Inscrit en
    Mai 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    merci pour la balise

    1- quand 2 contrat possedent la meme reference on peut faire la difference grace au code idntct
    en fait c pour differencier certaines monnaies: le code 3 est le code euro
    les autres (1 à 10) les autres monnaies
    donc idntct = 3 voualis dire que je voualis recupéerer le contrat ki a la reference annoncé et le code euro

    2- ok je me suis mal exprimé: jessaie detre un ti peu plus clair (c dur pour moi ossi il fo dire lol): la reference peu donner 2 contrats un en euro et lotre d'une otre monnaie (remember IDNTCT), si la date de du contrat non euro est non null je veu obtenirle produit associé au contrat euro , et si la date du contrat non euro est nulle alor je veu obtenir le produit de ce contrat euro

    3- erreur de saisie (differentes valeurs prises pour mes tests) j'ai modifié


    et merci zerk de te pencher sur mon pb

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 434
    Points : 502
    Points
    502
    Par défaut
    [QUOTE=faflenrage]merci pour la balise [quote]
    De rien

    Citation Envoyé par faflenrage
    1- quand 2 contrat possedent la meme reference on peut faire la difference grace au code idntct
    : OK

    Citation Envoyé par faflenrage
    2- ok je me suis mal exprimé: jessaie detre un ti peu plus clair
    : un conseil : évite le mode MSN / SMS parce que moi, je refuse de le lire. Le Français reste ma langue natale

    Citation Envoyé par faflenrage
    (c dur pour moi ossi il fo dire lol): la reference peu donner 2 contrats un en euro et lotre d'une otre monnaie (remember IDNTCT), si la date de du contrat non euro est non null je veu obtenirle produit associé au contrat euro , et si la date du contrat non euro est nulle alor je veu obtenir le produit de ce contrat euro
    et bien au lieu de faire un case...when, je te conseille de faire un UNION en séparant les deux cas..
    A mon avis, tu trouveras le résultat dans les 5mns

    Bien sur, cela suppose qu'à un instant T, des deux contrats n'ont pas tous les deux une date non nulle, ou tous les deux une date nulle. Sinon, tu pourras jamais t'en sortir

  5. #5
    Candidat au Club
    Inscrit en
    Mai 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    ok je vais essayer cette solution

    desole pour le langage msn, c'est comme le velo une fois qu'on a appris c'est dur de l'oublier lol (rien que pour cette phrase j'ai du repasser 3 fois pour essayer de parler francais)

  6. #6
    Candidat au Club
    Inscrit en
    Mai 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    non ca marche pas
    comme je peux avoir 2 dates nulles ou non je retombe pas sur mes pattes,

    j'essaie avec une table temporaire pour le moment.

    Si quelqu'un a dautres idées en attendant n'hésitez pas , je suis preneur

    merci

    --------------------------------------------------------
    bon bin j'ai fonctionné differemment et j'ai réussi a obtenir ce que je voulais , c'est pas propre ms ca marche donc voila (jvé ptetre pas partir dans des explications de ma solution vu comment j'ai eu du mal a expliquer le sujet lol)
    merci a Zerk pour son support

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 31/10/2005, 13h25
  2. case/when avec plusieurs valeurs pour le then
    Par Neo41 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 02/09/2005, 15h58
  3. Pb avec case when !
    Par Brice Yao dans le forum Langage SQL
    Réponses: 11
    Dernier message: 05/08/2005, 08h20
  4. Structure CASE WHEN en Interbase
    Par tchaman dans le forum InterBase
    Réponses: 8
    Dernier message: 13/12/2004, 16h18
  5. [SQL] performances Decode ou Case when ?
    Par Yorglaa dans le forum Oracle
    Réponses: 8
    Dernier message: 01/10/2004, 15h50

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