Rollup sur un select, (select..),... from...
jujucool
-
nicang -
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
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
A voir également:
- Rollup sur un select, (select..),... from...
- Reboot and select proper boot device - Forum Windows
- Reboot and select proper boot device asus - Forum Matériel & Système
- Select boot mode android - Guide
- Win setup from usb - Télécharger - Utilitaires
- Please select boot device - Forum Windows 7
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
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
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
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
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...
Je commence à désespérer car personne n'a l'air de savoir...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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+
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+