Bonjour à vous,
J'ai construit deux requêtes sur le meme groupe de table mais une avec une clause group by et l'autre sans. Je voudrais maintenant les relier pour n'en faire qu'une et je ne vois pas comment . Si quelqu'un peut m'aider...
Les tables coupables: (SAISON, FORMULE, RANGF)
(Désolé on ne peut pas importer d'images, et le code de création est auto généré, alors peut importe les types de données).
La table Formule est reliée à RangF par sa clé IdFormule
La table Saison est reliée à RangF par sa clé IdSaison
create table SAISON (
IDSAISON NUMBER(10,0) not null,
NOMSAISON VARCHAR2(64) not null,
ANNEE NUMBER(38,0) not null,
ACTIVE CHAR(1) not null,
COURANTE CHAR(1) not null, constraint SAISON_PK primary key (IDSAISON) );
create table FORMULE (
IDFORMULE NUMBER(10,0) not null,
NOMFORMULE VARCHAR2(255) not null,
PRIX NUMBER not null, constraint FORMULE_PK primary key (IDFORMULE) );
create table RANGF (
IDFORMULE NUMBER(38,0) not null,
IDSAISON NUMBER(38,0) not null,
NUMRANG NUMBER(38,0) null, constraint RANGF_PK primary key (IDFORMULE, IDSAISON) );
alter table RANGF
add constraint SAISON_RANGF_FK1 foreign key (
IDSAISON)
references SAISON (
IDSAISON) ON DELETE CASCADE;
alter table RANGF
add constraint FORMULE_RANGF_FK1 foreign key (
IDFORMULE)
references FORMULE (
IDFORMULE) ON DELETE CASCADE;
Les deux requetes :
1) SELECT Formule.IdFormule AS IdProduit, NomFormule AS NomProduit, Prix, Saison.IdSaison, NomSaison, Annee
FROM Formule
LEFT JOIN RangF ON (Formule.IdFormule = RangF.IdFormule OR RangF.IdSaison IS NULL)
LEFT JOIN Saison ON (RangF.IdSaison = Saison.IdSaison OR Saison.IdSaison IS NULL)
ORDER BY Formule.IdFormule DESC, Annee, Saison.IdSaison
Résultat 1:
| | | | | | |
| 10 | fghfghdf | 45 | NULL | NULL | NULL |
| 9 | cvn | 25 | NULL | NULL | NULL |
| 8 | Menu Saint Valentin | 25 | 1 | Janvier-Mars | 2006 |
| 7 | Formule Express | 7 | 1 | Janvier-Mars | 2006 |
| 7 | Formule Express | 7 | 2 | Avril-Juin | 2006 |
| 6 | Formule Complète | 9 | 1 | Janvier-Mars | 2006 |
| 5 | Menu enfant -12 ans | 8 | 1 | Janvier-Mars | 2006 |
| 5 | Menu enfant -12 ans | 8 | 2 | Avril-Juin | 2006 |
| 4 | Menu à | 16.5 | 1 | Janvier-Mars | 2006 |
| 4 | Menu à | 16.5 | 2 | Avril-Juin | 2006 |
| 3 | Menu à | 17.5 | 1 | Janvier-Mars | 2006 |
| 3 | Menu à | 17.5 | 2 | Avril-Juin | 2006 |
| 2 | Menu à | 21.5 | 1 | Janvier-Mars | 2006 |
| 2 | Menu à | 21.5 | 2 | Avril-Juin | 2006 |
| 1 | Menu Tout Compris | 25.5 | 1 | Janvier-Mars | 2006 |
| 1 | Menu Tout Compris | 25.5 | 2 | Avril-Juin | 2006 |
2) SELECT Formule.IdFormule, COUNT(Saison.IdSaison) AS Total
FROM Formule
LEFT JOIN RangF ON (Formule.IdFormule = RangF.IdFormule OR RangF.IdSaison IS NULL)
LEFT JOIN Saison ON (RangF.IdSaison = Saison.IdSaison OR Saison.IdSaison IS NULL)
GROUP BY Formule.IdFormule
ORDER BY IdFormule DESC
Résultat 2:
| | |
| 10 | 0 |
| 9 | 0 |
| 8 | 1 |
| 7 | 2 |
| 6 | 1 |
| 5 | 2 |
| 4 | 2 |
| 3 | 2 |
| 2 | 2 |
| 1 | 2 |
En fait, la requete 1 me donne la liste de tous les formules même celles qui ne sont pas reliées à une saison, et pour chaque formule, j'obtiens une ligne pour chaque saison avec son nom et son année.
Avec la requete 2, j'obtiens le nombre de saisons en relation avec chaque formule.
Maintenant, je voudrais joindre le résultat de ces deux requêtes pour avoir le résultat de la seconde dans les lignes appropriées du premier résultat. C'est à dire je voudrais que chaque ligne du Résultat 1 comporte une colonne supplémentaire (Total) du Résultat 2 en les reliant par l'IdFormule (il y aura une valeur identique, le nombre total de saison à laquelle elle est associée, pour chaque formule) .
Comment je fais

Merci