Probleme de requete MySQL avec des controles CASE

Probleme de requete MySQL avec des controles CASE - SQL/NoSQL - Programmation

Marsh Posté le 28-06-2006 à 09:40:03    

Bonjour à tous,
J'ai un p'tit probléme avec une de mes requêtes sur une BDD MySQL. J'ai voulu insérer une structure de contrôle CASE mais je ne comprend pas trop pourquoi cela ne fonctionne pas. Merci d'avance de votre aide..
 

Code :
  1. SELECT TPS_TOT=
  2.   CASE
  3.     WHEN qc.QUALIF='A' THEN SUM((sa.POURCENT*0.01)*(ao.POURCENT/100)*q.COUT_A)
  4.     WHEN qc.QUALIF='B' THEN SUM((sa.POURCENT*0.01)*(ao.POURCENT/100)*q.COUT_B)
  5.     WHEN qc.QUALIF='C' THEN SUM((sa.POURCENT*0.01)*(ao.POURCENT/100)*q.COUT_c)
  6.     WHEN qc.QUALIF='D' THEN SUM((sa.POURCENT*0.01)*(ao.POURCENT/100)*q.COUT_D)
  7.     WHEN qc.QUALIF='E' THEN SUM((sa.POURCENT*0.01)*(ao.POURCENT/100)*q.COUT_E)
  8.     WHEN qc.QUALIF='F' THEN SUM((sa.POURCENT*0.01)*(ao.POURCENT/100)*q.COUT_F)
  9.     WHEN qc.QUALIF='G' THEN SUM((sa.POURCENT*0.01)*(ao.POURCENT/100)*q.COUT_G)
  10.     WHEN qc.QUALIF='H' THEN SUM((sa.POURCENT*0.01)*(ao.POURCENT/100)*q.COUT_H)
  11.     WHEN qc.QUALIF='CS' THEN SUM((sa.POURCENT*0.01)*(ao.POURCENT/100)*q.COUT_CS)
  12.   END
  13. FROM budget.SUIVI_ACTIVITE sa
  14.   JOIN budget.APPLI_OBJS ao ON sa.ID_APPLIPROJET = ao.ID_APPLI
  15.   JOIN budget.CRHA c ON sa.ID_CRHA = c.ID_CRHA
  16.     JOIN budget.QUALIF_CHEMINOT qc ON c.ID_RESSOURCE = qc.CP_CHEMINOT AND sa.DATE_SUIVI BETWEEN qc.DATE_DEBUT_QUALIF AND qc.DATE_FIN_QUALIF
  17.   JOIN budget.QUALIFICATION q ON YEAR(sa.DATE_SUIVI) = q.ANNEE
  18. WHERE
  19.   YEAR(sa.DATE_SUIVI) = '2006'
  20.   AND ao.ID_OBJS = '2'
  21.   AND c.ID_RESSOURCE IN (SELECT CP_CHEMINOT FROM budget.CHEMINOT)
  22.   AND c.BVALIDE = true
  23. GROUP BY c.ID_RESSOURCE;

Reply

Marsh Posté le 28-06-2006 à 09:40:03   

Reply

Marsh Posté le 28-06-2006 à 10:07:23    

Et faut deviner ce qui fonctionne pas ?


---------------
Posté depuis des chiottes, sales. Me gusta.
Reply

Marsh Posté le 28-06-2006 à 10:09:26    

Avec les accolades en plus et le égale en moins ça donnes quoi ?

Code :
  1. SELECT TPS_TOT,
  2. {  CASE
  3.     WHEN qc.QUALIF='A' THEN SUM((sa.POURCENT*0.01)*(ao.POURCENT/100)*q.COUT_A)
  4.     WHEN qc.QUALIF='B' THEN SUM((sa.POURCENT*0.01)*(ao.POURCENT/100)*q.COUT_B)
  5.     WHEN qc.QUALIF='C' THEN SUM((sa.POURCENT*0.01)*(ao.POURCENT/100)*q.COUT_c)
  6.     WHEN qc.QUALIF='D' THEN SUM((sa.POURCENT*0.01)*(ao.POURCENT/100)*q.COUT_D)
  7.     WHEN qc.QUALIF='E' THEN SUM((sa.POURCENT*0.01)*(ao.POURCENT/100)*q.COUT_E)
  8.     WHEN qc.QUALIF='F' THEN SUM((sa.POURCENT*0.01)*(ao.POURCENT/100)*q.COUT_F)
  9.     WHEN qc.QUALIF='G' THEN SUM((sa.POURCENT*0.01)*(ao.POURCENT/100)*q.COUT_G)
  10.     WHEN qc.QUALIF='H' THEN SUM((sa.POURCENT*0.01)*(ao.POURCENT/100)*q.COUT_H)
  11.     WHEN qc.QUALIF='CS' THEN SUM((sa.POURCENT*0.01)*(ao.POURCENT/100)*q.COUT_CS)
  12.   END }
  13. FROM budget.SUIVI_ACTIVITE sa
  14.   JOIN budget.APPLI_OBJS ao ON sa.ID_APPLIPROJET = ao.ID_APPLI
  15.   JOIN budget.CRHA c ON sa.ID_CRHA = c.ID_CRHA
  16.     JOIN budget.QUALIF_CHEMINOT qc ON c.ID_RESSOURCE = qc.CP_CHEMINOT AND sa.DATE_SUIVI BETWEEN qc.DATE_DEBUT_QUALIF AND qc.DATE_FIN_QUALIF
  17.   JOIN budget.QUALIFICATION q ON YEAR(sa.DATE_SUIVI) = q.ANNEE
  18. WHERE
  19.   YEAR(sa.DATE_SUIVI) = '2006'
  20.   AND ao.ID_OBJS = '2'
  21.   AND c.ID_RESSOURCE IN (SELECT CP_CHEMINOT FROM budget.CHEMINOT)
  22.   AND c.BVALIDE = true
  23. GROUP BY c.ID_RESSOURCE;


Reply

Marsh Posté le 28-06-2006 à 10:11:10    

Au fait donnes un peu l'érreur que tu obtiens, et sinon quand tu fais ta somme dans tes case bah tu l'attribut à rien :heink: , il te manques donc un "as variable" après ton end je pense

Reply

Marsh Posté le 28-06-2006 à 10:13:11    

et avec CASE 1 au lieu de CASE tout court?


Message édité par betsamee le 28-06-2006 à 10:16:29
Reply

Marsh Posté le 28-06-2006 à 10:17:43    

Sebou77 a écrit :

Au fait donnes un peu l'érreur que tu obtiens, et sinon quand tu fais ta somme dans tes case bah tu l'attribut à rien :heink: , il te manques donc un "as variable" après ton end je pense


gné ? non
 
cf la doc de toute façon, que notre ami ferait bien de consulter avant d'appeler au secours: http://dev.mysql.com/doc/refman/4. [...] tions.html


---------------
Posté depuis des chiottes, sales. Me gusta.
Reply

Marsh Posté le 28-06-2006 à 10:50:52    

boulax a écrit :

gné ? non
 
cf la doc de toute façon, que notre ami ferait bien de consulter avant d'appeler au secours: http://dev.mysql.com/doc/refman/4. [...] tions.html


\o/
 
Par ailleurs, j'aime bcp le coté : "Moi pour les % une fois je fais fois 0.01 et une fois je divise par 100 ..."

Reply

Marsh Posté le 28-06-2006 à 11:16:51    

anapajari a écrit :

\o/
 
Par ailleurs, j'aime bcp le coté : "Moi pour les % une fois je fais fois 0.01 et une fois je divise par 100 ..."


De plus , j'aime beaucoup ton côté : "Foutage de gueule alors que l'on se trouve sur un forum afin d'aider les personnes qui ont quelques problémes...". Bref ton post est inutile...
 
Je suis désolé, j'ai zappé l'erreur que j'avais eu mais finalement j'ai résolu le probléme pra moi-même. Mais merci quand même...

Reply

Marsh Posté le 28-06-2006 à 11:18:34    

brasseld a écrit :

Je suis désolé, j'ai zappé l'erreur que j'avais eu mais finalement j'ai résolu le probléme pra moi-même. Mais merci quand même...


Ton post, voir ton Thread devient tout aussi inutile si tu ne nous dis pas quel etait le probleme et comment tu l'as résolu.


---------------
Posté depuis des chiottes, sales. Me gusta.
Reply

Marsh Posté le 28-06-2006 à 11:18:53    

brasseld a écrit :

De plus , j'aime beaucoup ton côté : "Foutage de gueule alors que l'on se trouve sur un forum afin d'aider les personnes qui ont quelques problémes...". Bref ton post est inutile...
 
Je suis désolé, j'ai zappé l'erreur que j'avais eu mais finalement j'ai résolu le probléme pra moi-même. Mais merci quand même...


c'etait pas le CASE 1 ??

Reply

Marsh Posté le 28-06-2006 à 11:18:53   

Reply

Marsh Posté le 28-06-2006 à 11:20:43    

La solution que j'ai trouvé. C'est peut-être pas la meilleure mais elle a le mérite de fonctionner correctement !!!

Code :
  1. SELECT
  2.   ao.ID_OBJS,
  3.   ao.ID_APPLI,
  4.   pa.ID_ACTIVITE,
  5.   c.ID_RESSOURCE,
  6.   SUM((sa.POURCENT*0.01)*(ao.POURCENT/100)) as TP_TOT,
  7.   SUM((sa.POURCENT*0.01)*(ao.POURCENT/100)*
  8.     CASE qc.QUALIF
  9.       WHEN 'A' THEN q.COUT_A
  10.       WHEN 'B' THEN q.COUT_B
  11.       WHEN 'C' THEN q.COUT_C
  12.       WHEN 'D' THEN q.COUT_D
  13.       WHEN 'E' THEN q.COUT_E
  14.       WHEN 'F' THEN q.COUT_F
  15.       WHEN 'G' THEN q.COUT_G
  16.       WHEN 'H' THEN q.COUT_H
  17.       WHEN 'CS' THEN q.COUT_CS
  18.     END ) as CT_TOT
  19. FROM budget.APPLI_OBJS ao
  20.   JOIN budget.SUIVI_ACTIVITE sa ON ao.ID_APPLI = sa.ID_APPLIPROJET
  21.   JOIN budget.PROJET_ACTIVITE pa ON ao.ID_APPLI = pa.ID_APPLIPROJET AND sa.ID_ACTIVITE = pa.ID_ACTIVITE
  22.     JOIN budget.QUALIFICATION q ON YEAR(sa.DATE_SUIVI) = q.ANNEE
  23.     JOIN budget.CRHA c ON sa.ID_CRHA = c.ID_CRHA
  24.       JOIN budget.QUALIF_CHEMINOT qc ON c.ID_RESSOURCE = qc.CP_CHEMINOT AND sa.DATE_SUIVI BETWEEN qc.DATE_DEBUT_QUALIF AND qc.DATE_FIN_QUALIF
  25. WHERE
  26.   YEAR(sa.DATE_SUIVI) = '2006'
  27.   AND ao.ID_OBJS = '2'
  28.   AND c.ID_RESSOURCE IN (SELECT CP_CHEMINOT FROM budget.CHEMINOT)
  29.   AND c.BVALIDE = true
  30. GROUP BY ao.ID_APPLI, pa.ID_ACTIVITE;

Reply

Marsh Posté le 28-06-2006 à 11:25:33    

Oh et puis flute [:manust]


---------------
Posté depuis des chiottes, sales. Me gusta.
Reply

Marsh Posté le 28-06-2006 à 11:27:17    

ouais bon en resume on a pas compris la question , on a pas compris la solution => on a tout gagne en essayant de t'aider


Message édité par betsamee le 28-06-2006 à 11:27:29
Reply

Marsh Posté le 28-06-2006 à 11:34:07    

boulax a écrit :

Oh et puis flute [:manust]


???
 
Sinon j'avais une erreur de syntaxe sur le case de ma requête et je n'arrivais pas à savoir comment l'éviter.
 

Reply

Marsh Posté le 28-06-2006 à 11:37:21    

CASE 1
WHEN CONDITION1 THEN TRUC1;
WHEN CONDITION2 THEN TRUC2;
WHEN CONDITIONN THEN TRUCN;
END as NOMAAFFICHER

Reply

Marsh Posté le 28-06-2006 à 11:39:21    

betsamee a écrit :

CASE 1
WHEN CONDITION1 THEN TRUC1;
WHEN CONDITION2 THEN TRUC2;
WHEN CONDITIONN THEN TRUCN;
END as NOMAAFFICHER


D'apres la doc tu peux te passer du 1 et faire un case when, then, when, then, else, end sans probleme.


---------------
Posté depuis des chiottes, sales. Me gusta.
Reply

Marsh Posté le 28-06-2006 à 11:40:03    

Oui mais il n'y a pas que ce schéma pour un CASE (voir ma solution)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed