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

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
Configuration: Windows XP
Firefox 3.0.10

5 réponses

  1. 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
    1. Je me permets de upper... Je n'ai toujours pas trouvé... Personne n'a d'idée?
      0
      1. 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
        1. 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
          1. Je me permets de upper car je n'ai toujours pas de réponse à ce problème
            0
            1. 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