Accueil > Forum > > > > Problèmes sur des Case When imbriqués
Problèmes sur des Case When imbriqués
mercredi 28 novembre 2007 à 13:21:55 |
Problèmes sur des Case When imbriqués

Orion01
|
Bonjour,
J'ai un souci sur des case when que je veux imbriquer. Je suis sous SQL7 et le code suivant se trouve dans une vue.
select case when prd.cdrescmr like 'SM%' then case when prd.cdtypprdach = '01' then case when prd.ctcan = 'NOP' then min(prd.pxvteeurtr3) else max(prd.pxvteeurtr3) -- pxvteeurtr3 = prix de vente des colis standards en SM end else case when prd.ctcan = 'NOP' then min(prd.pxvteeurcmptr3) else max(prd.pxvteeurcmptr3) -- pxvteeurcmptr3 = prix de vente des composants en SM end end else case when prd.cdtypprdach = '01' then case when prd.ctcan = 'NOP' then min(prd.pxvtegeneur) else max(prd.pxvtegeneur) -- pxvtegeneur = prix de vente des colis standards en HM end else case when prd.ctcan = 'NOP' then min(prd.pxvtegen) else max(prd.pxvtegen) -- pxvtegen = prix de vente des composants en HM end end as PrxVenteTTC from table prd where...
Est il possible d'imbriquer des case when comme ca?? Parce que dans cette version de code j'ai le message d'erreur suivant :
Server: Msg 156, Level 15, State 1, Procedure export_plana_All2, Line 166 Incorrect syntax near the keyword 'as'.
Merci pour votre aide.
|
|
mercredi 28 novembre 2007 à 13:37:33 |
Re : Problèmes sur des Case When imbriqués

pneau
|
salt apres vérif rapide, il semblerait qu'il te manque un "END" sur l'un de tes case select case when prd.cdrescmr like 'SM%' then case when prd.cdtypprdach = '01' then case when prd.ctcan = 'NOP' then min(prd.pxvteeurtr3) else max(prd.pxvteeurtr3) -- pxvteeurtr3 = prix de vente des colis standards en SM end else case when prd.ctcan = 'NOP' then min(prd.pxvteeurcmptr3) else max(prd.pxvteeurcmptr3) -- pxvteeurcmptr3 = prix de vente des composants en SM end end else case when prd.cdtypprdach = '01' then case when prd.ctcan = 'NOP' then min(prd.pxvtegeneur) else max(prd.pxvtegeneur) -- pxvtegeneur = prix de vente des colis standards en HM end else case when prd.ctcan = 'NOP' then min(prd.pxvtegen) else max(prd.pxvtegen) -- pxvtegen = prix de vente des composants en HM end end END
Pat Don't Worry , Be Happy 
|
|
mercredi 28 novembre 2007 à 13:39:03 |
Re : Problèmes sur des Case When imbriqués

pneau
|
re, petite précision sur SQL 7... le moteur n'est pas très performant et les requetes complexes peuvent poser des soucis.. si tu en as la possibilité passe au moins à la version SQL 2000.. pour info, MSDE 2000 est gratuit, sinon, tu as la version SQL Express 2005 est gratuite également @+ Pat Don't Worry , Be Happy 
|
|
mercredi 28 novembre 2007 à 15:29:45 |
Re : Problèmes sur des Case When imbriqués

Orion01
|
Effectivement, il manquait un end!! Bien vu ;-)
Et pour SQL2000 : je sais!! Je lutte corps et ame au travail pour migrer.
Par contre, j'ai corrigé le probleme et maintenant ma vue ne veut toujours pas se lancer! J'ai des erreurs sur les champs du select :
Server: Msg 8118, Level 16, State 1, Procedure export_plana_All2, Line 11 Column 'col.anssrcll' is invalid in the select list because it is not contained in an aggregate function and there is no GROUP BY clause.
Donc ??? Car avant ce case when, ca marchait tres bien??
Merci beaucoup.
|
|
mercredi 28 novembre 2007 à 15:35:00 |
Re : Problèmes sur des Case When imbriqués

pneau
|
re, en fait dans ton "Case When" tu utilises des fonctions (Max, Min) qui ne permette de ramener qu'un seul enregistrement suivant les critères définis. hors, si tu ajoutes dans ton select d'autres champs, ces derniers peuvent avoir des valeurs multiples, donc il est obligatoire, pour respecter les clauses, Max et Min, que tu utilises un Group By pour les autres champs. si tu ne le souhaites pas, tu seras obligé de réécrire ta requete différement. @+ Pat Don't Worry , Be Happy 
lorsque le problème est résolu, pensez Réponse Acceptée  et un petit message en plus n'est pas de refus...
|
|
mercredi 28 novembre 2007 à 15:37:05 |
Re : Problèmes sur des Case When imbriqués

pneau
|
oups, j'ai oublié un exemple ... Select Max(Champ1) as champ1, Min(Champ2) as Champ2, Champ3 from table... si on laisse comme cela, cela plante avec le message que tu as indiqué... par contre en mettant : Select Max(Champ1) as champ1, Min(Champ2) as Champ2, Champ3 from table group by champ3 cela fonctionnera courage... Pat Don't Worry , Be Happy 
lorsque le problème est résolu, pensez Réponse Acceptée  et un petit message en plus n'est pas de refus...
|
|
mercredi 28 novembre 2007 à 16:10:07 |
Re : Problèmes sur des Case When imbriqués

Orion01
|
Bon je viens de prendre en compte ta remarque. Donc tous les champs qui sont renommés (donc avec un AS quelque chose) ne doivent pas etre repris dans le group by. C'est bien ca? Et moi, ben j'ai que des champs renommés. Ce qui fait que si je laisse comme avant, ben ca plante et si je fait un group by mes champs renommés, ben ca plante aussi en me disant ceci :
Server: Msg 207, Level 16, State 1, Procedure export_plana_All2, Line 11 Invalid column name 'CHAMPX'.
Je desespère.
|
|
mercredi 28 novembre 2007 à 16:16:20 |
Re : Problèmes sur des Case When imbriqués

pneau
|
donnes ta requete complete STP... on va regardé Pat Don't Worry , Be Happy 
lorsque le problème est résolu, pensez Réponse Acceptée  et un petit message en plus n'est pas de refus...
|
|
mercredi 28 novembre 2007 à 16:24:54 |
Re : Problèmes sur des Case When imbriqués

Orion01
|
Je te l'ai envoyé en MP.
Je mettrais la solution ici.
Merci.
|
|
mercredi 28 novembre 2007 à 18:47:34 |
Re : Problèmes sur des Case When imbriqués

Orion01
|
Voila la solution :
A cause du min/max sur le prix de vente qui ne renvoi qu'un seul enregistrement alors que le select en renvoi plusieurs, il faut obligatoirement pour respecter les clauses min/max, utiliser un Group By pour les autres champs.
Par contre, dans la liste des champs du Group By, il faut mettre T O U S les champs utilisés dans les Case When !!!!
RQ : ne pas mettre les allias (AS) dans le Group By !!
Merci à pneau pour sa présieuce aide ;-)
|
|
Cette discussion est classée dans : case, when, prd, else, then
Répondre à ce message
Sujets en rapport avec ce message
Case dans une clause where [ par yaya2669 ]
Bonjour, Je cherche a faire une requete de ce genre : ----------- Select Case when Matable1.Desc = 'Desc1' then '1' when Matable1.Desc = '
Somme en sql [ par yaya2669 ]
Bonjour,Voila la requete de baseSelect 'Montant'=Case WHEN T0.PRICE=100 then 10 else 20 end,'Montant2'=Case WHEN T0.PRICEFROM ITM1 T0Je voudrais maint
SQL CASE WHEN [ par fafal ]
Hello J'ai un problème avec cette requete...SELECT CASE Result WHEN >0 THEN 96-RESULT ELSE 96 END as testJe voudrai que QUAND RESULT est un chiffre al
Instruction CASE [ par casy ]
Salut à tous,J'ai une question probablement un peu con, mais bon; Je dois mettre en production dans peu de temps et je n'ai pas la base production pou
Problème incorrect syntax near '=' [ par waluigi44 ]
Bonjour, je débute dans les requetes SQL. Voici mon code qui m'envoie l'erreur suivant ncorrect syntax near '=' [code=autre] UPDATE dbo.Nop_Add
CASE WHEN avec opérateur IN [ par bossun ]
salut j'ai un peu de peine à écrire une requete sql avec un case when dans une clause where... [size=100] SELECT max(ResultsID) FROM panoram
Case or not Case [ par quinquin59 ]
BOnjour, je bloque sur un truc sur une base de donnée access. voici mon probléme J'ai une table A avec les champs QuotientD ,QuotientF, Valeurs J'ai u
sous requête dans CASE [ par citt ]
Bonjour, Est il possible de faire des sous requêtes dans le THEN d'un case ? J'ai des table du genre produits - ID - Nom - ID_User1 - ID_User2 use
lire contenu d'une case d'une BDD ODBC [ par ju0123456789 ]
Bonjour,Pourriez-vous me dire comment je peux lire le contenu d'une case de ma base de donnée ODBC SVP ?Je susi en train de faire une confirmation d'i
Multi requete sql et champ repeter PHP [ par inkydjango ]
Slt a tous !! Une nouvelle colle pour les boss !! Je dois creer un tableau sur lequel je dois inserer plusieurs requete sql sur un zone repetée: je
Livres en rapport
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Forum
RE : ORACLE FORMSRE : ORACLE FORMS par csmahicham
Cliquez pour lire la suite par csmahicham
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|