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

jujucool -  
 nicang -
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. jujucool
     
    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
  2. jujucool
     
    Je me permets de upper... Je n'ai toujours pas trouvé... Personne n'a d'idée?
    0
  3. jujucool
     
    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
  4. jujucool
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. jujucool
     
    Je me permets de upper car je n'ai toujours pas de réponse à ce problème
    0
    1. nicang
       
      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