Vous n'êtes pas identifié(e).
Pages : 1
Bonjour !
Après de nombreuses heures de recherche sur les forums, je n'arrive toujours pas à faire ce que je veux faire : ajouter en fin de select une ligne total.
Voici ce que je veux faire :
Organisme Nombre
AA 12
BB 26
YY 30
TOTAL 68
J'utilise deux selects reliés par un union mais le union me panache les deux selects et ordonne par ordre alphabétique, si bien que j'obtiens :
Organisme Nombre
AA 12
BB 26
TOTAL 68
YY 30
Comment faire ?????
Je joins mon code (simplifié) :
(
select Organisme.nomOrganisme,
sum(NombreEmploye.nombre)
from NombreEmploye, Organisme
where NombreEmploye.idOrganisme=Organisme.idOrganisme
group by Organisme.nomOrganisme
)
union
(
select 'TOTAL' as TOTAL, sum(NombreEmploye.nombre)
from NombreEmploye
)
;
Merci pour votre aide !
Hors ligne
SELECT
*
FROM (
(
select Organisme.nomOrganisme,
sum(NombreEmploye.nombre)
from NombreEmploye, Organisme
where NombreEmploye.idOrganisme=Organisme.idOrganisme
group by Organisme.nomOrganisme
)
union
(
select 'TOTAL' as TOTAL,
sum(NombreEmploye.nombre)
from NombreEmploye
)
) tmp
ORDER BY Organisme.nomOrganisme='total' asc, Organisme.nomOrganisme
;
Pas beau mais ça marche. Même si la présentation n'est pas vraiment le boulot du SGBD...
Guillaume.
Hors ligne
Salut !
Merci pour ta réponse, mais ça ne marche pas...
J'ai cette erreur :
ERROR: missing FROM-clause entry for table "Organisme"
LINE 21: ORDER BY Organisme.nomOrganisme='total' asc, Org...
Hors ligne
Mais je viens de tenter autre chose :
SELECT
*
FROM (
(
select Organisme.nomOrganisme,
sum(NombreEmploye.nombre) AS Countt
from NombreEmploye, Organisme
where NombreEmploye.idOrganisme=Organisme.idOrganisme
group by Organisme.nomOrganisme
)
union
(
select 'TOTAL' as TOTAL,
sum(NombreEmploye.nombre) AS Countt
from NombreEmploye
)
) tmp
ORDER BY Countt
;
Et ça marche !
Et oui, le TOTAL est supérieur à tous les autres SUM, donc il est mis en dernier.
A+ et merci !
Hors ligne
Ah oui, j'ai oublié le renommage de la table. Voici la requête corrigée :
SELECT
*
FROM (
(
select Organisme.nomOrganisme,
sum(NombreEmploye.nombre)
from NombreEmploye, Organisme
where NombreEmploye.idOrganisme=Organisme.idOrganisme
group by Organisme.nomOrganisme
)
union
(
select 'TOTAL' as TOTAL,
sum(NombreEmploye.nombre)
from NombreEmploye
)
) tmp
ORDER BY tmp.nomOrganisme='total' asc, tmp.nomOrganisme
;
Guillaume.
Hors ligne
hum, non ça ne marche toujours pas, j'ai :
ERROR: schema "tmp" does not exist
Hors ligne
Ça marche sur le mien, en 9.0. Peut-être que vous utilisez une version différente ?
Guillaume.
Hors ligne
Bonjour, il me semble qu'avant la 9, il etait de bon ton de mettre le AS :
SELECT
*
FROM (
(
select Organisme.nomOrganisme,
sum(NombreEmploye.nombre)
from NombreEmploye, Organisme
where NombreEmploye.idOrganisme=Organisme.idOrganisme
group by Organisme.nomOrganisme
)
union
(
select 'TOTAL' as TOTAL,
sum(NombreEmploye.nombre)
from NombreEmploye
)
) AS tmp
ORDER BY tmp.nomOrganisme='total' asc, tmp.nomOrganisme;
sinon, toujours dans le crado:
SELECT
*
FROM (
(
select Organisme.nomOrganisme,
sum(NombreEmploye.nombre)
from NombreEmploye, Organisme
where NombreEmploye.idOrganisme=Organisme.idOrganisme
group by Organisme.nomOrganisme
)
union
(
select 'TOTAL' as TOTAL,
sum(NombreEmploye.nombre)
from NombreEmploye
)
) AS tmp
ORDER BY 2;
Cordialement
Hors ligne
Salut !
Merci pour votre aide !
Le code utilisant AS ne marche pas, mais avec le "order by 2", ça marche.
Mais je me demande quelle est la signification de ce "order by 2" ?
A+
Hors ligne
2 : 2eme colonne retournée par le select
Exemple : select toto, titi, tata from foo order by 2 ==> va faire un order sur la colonne titi.
Dernière modification par arthurr (14/01/2011 13:09:46)
Hors ligne
On demande d'ordonner par la colonne 2. On aurait pu aussi utiliser le nom de la deuxième colonne.
Guillaume.
Hors ligne
ok merci à tous
Hors ligne
Pages : 1