Requete union

Fermé
unseen Messages postés 56 Date d'inscription mercredi 17 décembre 2008 Statut Membre Dernière intervention 25 avril 2013 - Modifié par irongege le 10/12/2012 à 16:55
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 - 12 déc. 2012 à 19:53
Bonjour,


2 requetes :

- la 1 ère affiche (après différents regroupement et somme) ds un tableau les données d'un lot de produits, ses quantités entrées et le mois et l'année coe ceci :

A 17 janvier 2012
B 12 janvier 2012

requete sql correspondante

SELECT T_entreprise.nature AS NATURE, T_commande.designation AS DESIGNATION, Sum(T_commande.quantite) AS [QUANTITE LIVREE], Month([T_entreprise]![date_livraison]) AS MOIS, Year([T_entreprise]![date_livraison]) AS ANNEE
FROM T_entreprise INNER JOIN T_commande ON T_entreprise.id_entreprise=T_commande.id_entreprise
GROUP BY T_entreprise.nature, T_commande.designation, Month([T_entreprise]![date_livraison]), Year([T_entreprise]![date_livraison]);


- la 2 ième affiche ds un autre tableau les données d'un lot de produits plus ou moins identique à la 1 ère, ses quantités sorties et le mois coe ceci :

A 10 janvier
B 3 janvier
C 11 janvier
D 23 janvier

requete sql correspondante

SELECT T_direction.nature AS NATURE, T_besoin.designation AS DESIGNATION, Sum(T_besoin.q_servie) AS [QUANTITE SERVIE], Month([T_direction]![date_reception]) AS MOIS, Year([T_direction]![date_reception]) AS ANNEE
FROM T_direction INNER JOIN T_besoin ON T_direction.id_direction = T_besoin.id_direction
GROUP BY T_direction.nature, T_besoin.designation, Month([T_direction]![date_reception]), Year([T_direction]![date_reception]);

MON OBJECTIF

je desire à travers une dernière requete avoir à la fin un tableau

produit entrees sorties mois
A 17 10 jan
B 12 3 jan
C 0 11 jan
D 0 23 jan

je pense qu'il faut une requête union ou d'une requete jointure mais je sais pas comment m'y prendre ;surtout avec les valeurs nulles qui doivent rentrer en ligne de compte

AIDEZ MOI PLEASE

3 réponses

Morgothal Messages postés 1236 Date d'inscription jeudi 22 avril 2010 Statut Membre Dernière intervention 19 mai 2015 183
10 déc. 2012 à 16:59
Bonjour,
Si tes lots de produits sont uniques dans les 2 jeux de résultats, tu peux faire facilement une requête ainsi :
SELECT * FROM (REQUETE1) req1 
INNER JOIN (REQUETE2) req2 ON req1.Lot = req2.Lot


Ou alors créer 2 tables temporaires où tu insères les résultats des 2 requêtes, et tu jointes (du verbe jointer oui oui) de la même manière.
0
unseen Messages postés 56 Date d'inscription mercredi 17 décembre 2008 Statut Membre Dernière intervention 25 avril 2013
12 déc. 2012 à 16:32
oui les lots de produits sont uniques ds les deux requetes. seulement devrais je préciser que les memes produits ne se retrouvent pas forcément ds les deux requetes, l'une pouvant contenir plus de produits que l'autre.

exple ds la 1 ère on a les produits A. B. C avec leur qtité entrées 10;5,8 et ds la 2ième on aura parfois B. C. D. E. F avec leur qtite sorties 12,5,6,5,2

l'idée sera d'avoir à la fin un tableau qui va faire une soustraction entre les entrées et les sorties et mettra des quantités zero pour les qtité inexistantes ds l'une des requetes coe ceci

A,10,0,10
B,5,12,-7
C,8,5,3
D,0,6,-6
E,0,5,-5
F,0,2,-2

c'est une sorte de fusion des deux requetes mais horizontalement à la différence d'une requete union.


j'ai précedemment fais un INNER JOIN sur les produits ... cette requete ignore des produits qui st pas communs au resultats des deux requetes cad ds mon exple du haut les produits A,D,E,F

tu as mes deux requetes . aide moi à créer concretement la troisième que je voudrais.

si tu veux je t'envoie via email une copie de ma bd pr qu'on puisse en discuter et se comprendre...
0
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
12 déc. 2012 à 19:53
Bonjour,

Pour avoir tous les résultats y compris les NULL, tu reprends la requête de Morgothal mais tu remplaces INNER JOIN par FULL OUTER JOIN

Xavier
0