begin process at 2012 05 26 14:36:34
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive SQL

 > 

Archives

 > 

Problème avec une requête

 > 

Deux requêtes qui ne feraient plus qu'une ?


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Deux requêtes qui ne feraient plus qu'une ?

dimanche 12 février 2006 à 21:04:10 | Deux requêtes qui ne feraient plus qu'une ?

AlexN

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:
IdProduit
NomProduit
Prix
IdSaison
NomSaison
Annee
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:
IdFormule
Total
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

lundi 13 février 2006 à 16:01:22 | Re : Deux requêtes qui ne feraient plus qu'une ?

Mindiell

Une solution simple conssite à faire le calcul pour chaque ligne :

SELECT Formule.IdFormule AS IdProduit, NomFormule AS NomProduit, Prix, Saison.IdSaison, NomSaison, Annee
, (
SELECT COUNT(IdFormule) FROM Formule AS F2
WHERE F2.IdFormule = F1.IdFormule
GROUP BY Formule.IdFormule
) AS Total

FROM Formule AS F1
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



Mindiell Software
mercredi 15 février 2006 à 18:21:12 | Re : Deux requêtes qui ne feraient plus qu'une ?

AlexN

Bonjour,

Merci pour votre réponse et désolé pour ce retour un peu tardif. J'étais au moulin (et pas au four...)
Juste un soucis au niveau de la syntaxe, votre réponse provoquant des messages du type "champ inconnu". J'ai essayé de compléter les alias :

 SELECT F1.IdFormule AS IdProduit, NomFormule AS NomProduit, Prix, Saison.IdSaison, NomSaison, Annee, (

SELECT COUNT( IdFormule )
FROM Formule AS F2
WHERE F2.IdFormule = F1.IdFormule
GROUP BY F2.IdFormule
) AS Total
FROM Formule AS F1
LEFT JOIN RangF ON ( F1.IdFormule = RangF.IdFormule
OR RangF.IdSaison IS NULL )
LEFT JOIN Saison ON ( RangF.IdSaison = Saison.IdSaison
OR Saison.IdSaison IS NULL )
ORDER BY F1.IdFormule DESC , Annee, Saison.IdSaison


et j'obtiens :

"la table F1 n'existe pas"

Où me suis-je trompé ?
Merci beaucoup si vous avez une réponse.
mercredi 15 février 2006 à 20:02:46 | Re : Deux requêtes qui ne feraient plus qu'une ?

Mindiell

Dans les ON, je laisserais Formule...

je ne mettrais pas de parenthèse autour des ON...

Tu es en SQLServer ?
samedi 18 février 2006 à 14:55:57 | Re : Deux requêtes qui ne feraient plus qu'une ?

AlexN

Réponse acceptée !
Bonjour,

En repartant de l'idée du champ calculé pour chaque ligne, j'ai refait les jointures dans la sous-requête, modifié la syntaxe des alias et enlevé les parenthèses inutiles :

SELECT F1.IdFormule AS IdProduit, NomFormule AS NomProduit, Prix, Saison.IdSaison, NomSaison, Annee, (
SELECT COUNT( Saison.IdSaison )
FROM Formule F2
LEFT JOIN RangF ON F2.IdFormule = RangF.IdFormule
OR RangF.IdSaison IS NULL
LEFT JOIN Saison ON RangF.IdSaison = Saison.IdSaison
OR Saison.IdSaison IS NULL
WHERE F2.IdFormule = F1.IdFormule
) AS Total
FROM Formule F1
LEFT JOIN RangF ON F1.IdFormule = RangF.IdFormule
OR RangF.IdSaison IS NULL
LEFT JOIN Saison ON RangF.IdSaison = Saison.IdSaison
OR Saison.IdSaison IS NULL
ORDER BY F1.IdFormule DESC , Annee, Saison.IdSaison

Et mysql me DONNE LA BONNE REPONSE !!!!
Alors grand merci pour votre aide.


Cette discussion est classée dans : formule, idsaison, saison, idformule, rangf


Répondre à ce message

Sujets en rapport avec ce message

comment rajouter un champs calculé contenant une formule [ par phibu ] Bonjour,j'ai une formule a appliquer sur deux champs existant  pour en créer un troisième Quel est l Convertion de contenu de variable [ par anspauldou ] Salut Je vous expose mon problème. Voilà j'ai une variable de type char(30) qui contient la formule suivante @VarFormule = '30000*28/30'. Je voudrais Remplacement de valeurs pour formule de calcul [ par anspauldou ] Bonjour J'ai deux tables Formule et SaisieValeur La table Formule contient : Insert Into Formule (NumFormule, LibFormule) Values ('01', (({a}+{b})* Gestion de championnat et coupe de football PL/SQL [ par isettt ] [b]Enoncé[/b] Considérer les schémas de relations suivants : Nous proposons d'étudier l'informatisation d'un système de gestion de la FFF (Fédération Parcourt de chaine et Formule de calcul [ par anspauldou ] Bonjour J'ai deux tables dont l'une est Table_Formule et l'autre Table_Donnee. La table Table_Formule contient les informations suivantes : insert in erreur dans requete [ par perrinosky ] $requete ="DELETE FROM chalet_resa AS f,conditions_nuitee_annonce_controlax AS t WHERE f.visiteur='$Identificateur' AND t.saison='".$saison."' ";


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,279 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales