Rollup sur un select, (select..),... from...

Fermé
jujucool - 13 mai 2009 à 15:20
 nicang - 1 juil. 2009 à 12:20
Bonjour,
J'ai un problème avec le rollup sous mySQL. En fait je fais quelque chose du genre :

SELECT a, b,
(SELECT c FROM d WHERE...),
(SELECT d FROM e WHERE...)
FROM f
GROUP BY a, b WITH ROLLUP

Et dans ce cas, le ROLLUP ne fait la somme désirée mais ne fait que reprendre la ligne juste au dessus...
Y aurait-il un problème avec les requêtes imbriquées?

Je vous donne la requête (légérement barbare!) au cas où...
Merci d'avance

----
select mvtTiers,mvtProduit,

round((select if(sum(mvtTonnageBascule) is null, 0, sum(mvtTonnageBascule)) from mouvement where mvtProduit=m.mvtProduit and mvtDate<=(select max(mvtDate) from mouvement where mvtDate < '2009-03-09') ),2) as SI,

(select if(sum(mvtTonnageBascule) is null, 0, sum(mvtTonnageBascule)) from mouvement where mvtProduit=m.mvtProduit and mvtDate between '2009-03-09' and '2009-03-15' and mvtMode='CAMION' and mvtType='ENTREE') as EC,

(select if(sum(mvtTonnageBascule) is null, 0, sum(mvtTonnageBascule)) from mouvement where mvtProduit=m.mvtProduit and mvtDate between '2009-03-09' and '2009-03-15' and mvtMode='TRAIN' and mvtType='ENTREE') as ET,

(select if(sum(mvtTonnageBascule) is null, 0, sum(mvtTonnageBascule)) from mouvement where mvtProduit=m.mvtProduit and mvtDate between '2009-03-09' and '2009-03-15' and mvtMode='BATEAU' and mvtType='ENTREE') as EB,

(select if(sum(mvtTonnageBascule) is null, 0, sum(mvtTonnageBascule)) from mouvement where mvtProduit=m.mvtProduit and mvtDate between '2009-03-09' and '2009-03-15' and mvtMode='TRANSFERT' and mvtType='ENTREE') as ETr,

(select if(sum(mvtTonnageBascule) is null, 0, sum(mvtTonnageBascule)) from mouvement where mvtProduit=m.mvtProduit and mvtDate between '2009-03-09' and '2009-03-15' and mvtType='ENTREE') as TE,

(select if(sum(mvtTonnageBascule) is null, 0, sum(mvtTonnageBascule)) from mouvement where mvtProduit=m.mvtProduit and mvtDate between '2009-03-09' and '2009-03-15' and mvtMode='CAMION' and mvtType='SORTIE') as SC,

(select if(sum(mvtTonnageBascule) is null, 0, sum(mvtTonnageBascule)) from mouvement where mvtProduit=m.mvtProduit and mvtDate between '2009-03-09' and '2009-03-15' and mvtMode='TRAIN' and mvtType='SORTIE') as ST,

(select if(sum(mvtTonnageBascule) is null, 0, sum(mvtTonnageBascule)) from mouvement where mvtProduit=m.mvtProduit and mvtDate between '2009-03-09' and '2009-03-15' and mvtMode='BATEAU' and mvtType='SORTIE') as SB,

(select if(sum(mvtTonnageBascule) is null, 0, sum(mvtTonnageBascule)) from mouvement where mvtProduit=m.mvtProduit and mvtDate between '2009-03-09' and '2009-03-15' and mvtMode='TRANSFERT' and mvtType='SORTIE') as STr,

(select if(sum(mvtTonnageBascule) is null, 0, sum(mvtTonnageBascule)) from mouvement where mvtProduit=m.mvtProduit and mvtDate between '2009-03-09' and '2009-03-15' and mvtType='SORTIE') as TS,

round((select if(sum(mvtTonnageBascule) is null, 0, sum(mvtTonnageBascule)) from mouvement where mvtProduit=m.mvtProduit and mvtDate<= '2009-03-15'),2) as SF

from mouvement m
group by mvtTiers, mvtProduit with rollup

5 réponses

Re bonjour,
J'ai essayé sans select imbriqué et le cumul est correct... Mais j'ai absolument besoin de ces select imbriqués... Queulqu'un aurait-il une idée?
Merci d'avance
0
Je me permets de upper... Je n'ai toujours pas trouvé... Personne n'a d'idée?
0
Bonjour,

J'ai essayé

SELECT * FROM(
SELECT a, b,
(SELECT c FROM d WHERE...),
(SELECT d FROM e WHERE...)
FROM f
) as sr
GROUP BY a, b WITH ROLLUP

Résultat identique... :(
Help :s
0
A mon avis le rollup n'arrive pas à s'appliquer sur les select imbriqués :'(
Je commence à désespérer car personne n'a l'air de savoir...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Je me permets de upper car je n'ai toujours pas de réponse à ce problème
0
Bonjour,

Si j’ai bien compris, tu souhaites avoir le total par colonne. J’imagine que les colonnes a et b sont des codes ou des libelles, et les colonnes c et d des comptages.
Je travaille sur SQL SERVER 2005, et on a la possibilité de faire des expressions de table (CTE : Common Table Expression) et voici la solution que j’emploie :

WITH STAT_ABCD (A,B,C,D) AS (
SELECT A, B, (SELECT COUNT(*)
FROM D WHERE F.ID = C.ID ...) C,
(SELECT SUM(TOTO)
FROM E WHERE E.ID = F.ID ...) D
FROM F
GROUP BY A, B )
SELECT *
FROM STAT_ABCD
UNION
SELECT '','TOTAL',SUM(C),SUM(D)
FROM STAT_ABCD

J’espère t’avoir aidé.
A+
0