Additionner les résultat de deux requêtes SQL en access SQL

Additionner les résultat de deux requêtes SQL en access SQL - SQL/NoSQL - Programmation

Marsh Posté le 28-09-2005 à 10:27:44    

Voilà encore un problème , je possède une table domaine liée à une table avis_travaux pour les champs domaine1 et domaine2.
Ce que je veux c'est connaitre le nombre d'avis par domaine (qu'il s'agisse du domaine1 ou deux m'est égale)
Hors grace aux requettes suivantes :
 
SELECT DISTINCTROW domaine.réf_domaine, domaine.nom_domaine, Count(*) AS [Somme De domaine1]
FROM domaine INNER JOIN Avis_travaux ON domaine.réf_domaine=Avis_travaux.domaine1
GROUP BY domaine.réf_domaine, domaine.nom_domaine;
 
 
et
 
SELECT DISTINCTROW domaine.réf_domaine, domaine.nom_domaine, Count(*) AS [Somme De domaine2]
FROM domaine INNER JOIN Avis_travaux ON domaine.réf_domaine=Avis_travaux.domaine2
GROUP BY domaine.réf_domaine, domaine.nom_domaine;
 
 
J'arrive a comptabiliser le nombre d'avis par domaine1 ou domaine 2
Mais je n'arrive pas à réunir les deux  :pfff:  
Merci d'avance si quelqu'un a une idée car j'ai essayé plein de choses qui n'ont pas fonctionnées.

Reply

Marsh Posté le 28-09-2005 à 10:27:44   

Reply

Marsh Posté le 28-09-2005 à 10:37:01    

select domaine.ref_domaine, domaine.nom_domaine, count(*)
from domaine, avis_travaux
where (domaine.ref_domaine = avis_travaux.domaine1
          or domaine.ref_domaine = avis_travaux.domaine2)
group by (domaine.réf_domaine, domaine.nom_domaine)
 
:??:

Reply

Marsh Posté le 28-09-2005 à 10:58:18    

Merci, mais j'ai déja essayé cela et ça ne marche pas  :??:
En fait je m'explique ça ne marche pas vraiment, car supposons que pour un même avis le domaine1 et le domaine2 sont identiques, il ne le comptera qu'une seule fois, hors je voudrait que cela compte comme deux. D'ou le problème  :(

Message cité 1 fois
Message édité par sharky01 le 28-09-2005 à 11:01:20
Reply

Marsh Posté le 28-09-2005 à 10:59:43    

sharky01 a écrit :

Merci, mais j'ai déja essayé cela et ça ne marche pas  :??:


Comment ça ça ne marche pas? [:pingouino]

Reply

Marsh Posté le 28-09-2005 à 11:02:27    

Désolé j'ai réedité mon message plus haut pour expliquer, car oui bien sur la requêtte est bonne mais elle ne fait pas exactement ce que je veux d'ou le problème  :(

Reply

Marsh Posté le 28-09-2005 à 11:10:52    

ok...dans ce cas, une union?
 

Code :
  1. select ref_domaine, nom_domaine, sum(somme1 + somme2)
  2. from
  3. (
  4. (select ref_domaine, nom_domaine, count(*) as somme1, 0 as somme2
  5. from ...
  6. where ref_domaine = avis_travaux.domaine1
  7. group by ref_domaine, nom_domaine)
  8. union
  9. (select ref_domaine, nom_domaine, 0 as somme1, count(*) as somme2
  10. from ...
  11. where ref_domaine = avis_travaux.domaine2
  12. group by ref_domaine, nom_domaine)
  13. )
  14. )
  15. group by ref_domaine, nom_domaine;


 
 
:??:
 
(ya sûrement moyen de faire plus simple...[:petrus75])


Message édité par skeye le 28-09-2005 à 11:11:02
Reply

Marsh Posté le 28-09-2005 à 11:32:55    

Merci mais l'union pose un léger probleme, car il n'additionne pas le contenus, je m'explique moi ce que je voudrais ce serait cela :
 
réf_domaine | nom_domaine|SomDomaine
----------------------------------------
       1        | transmission  |       3
 
 
et avec l'union j'obtiens :
 
réf_domaine | nom_domaine|SomDomaine
----------------------------------------
       1        | transmission  |       2
       1        | transmission  |       1
 
Ce n'est pas simple mon affaire :(

Reply

Marsh Posté le 28-09-2005 à 11:35:05    

t'es sûr d'avoir lu ma requête?:o

Reply

Marsh Posté le 28-09-2005 à 12:00:01    

Oui mais j'ai un problème quand je fais :
select réf_domaine, nom_domaine, sum(somme1 + somme2)  
from
 
(SELECT réf_domaine, nom_domaine, 0 AS somme1, count(*) AS somme2
FROM domaine, avis_travaux
WHERE réf_domaine=avis_travaux.domaine2
GROUP BY réf_domaine, nom_domaine)
 
UNION
 (SELECT réf_domaine, nom_domaine, count(*) AS somme1, 0 AS somme2
FROM domaine, avis_travaux
WHERE réf_domaine=avis_travaux.domaine1
GROUP BY réf_domaine, nom_domaine);
 
J'ai une erreur me disant que "Le nombre de colonnes dans les deux tabes ou requêtes sélectionnées d'une requête Union ne correspondent pas."
 
Ce qui n'a pas de sens elle possèdent toutes deux 4 colonnes  :heink:

Reply

Marsh Posté le 28-09-2005 à 12:01:59    

Attention de bien utiliser UNION ALL et pas UNION (qui fait en réalité un DISTINCT dans le groupement des résultats ...).
 
De plus, le DISTINCTROW n'est probablement pas nécessaire vu qu'on fait des GROUP BY.
 
En conclusion, quelque chose comme :
 

Code :
  1. SELECT réf_domaine, nom_domaine, SUM(somme)
  2. FROM (
  3. SELECT domaine.réf_domaine, domaine.nom_domaine, Count(*) AS somme
  4. FROM domaine, Avis_travaux
  5. WHERE domaine.réf_domaine=Avis_travaux.domaine1
  6. GROUP BY domaine.réf_domaine, domaine.nom_domaine
  7. UNION ALL
  8. SELECT domaine.réf_domaine, domaine.nom_domaine, Count(*) AS somme
  9. FROM domaine, Avis_travaux
  10. WHERE domaine.réf_domaine=Avis_travaux.domaine2
  11. GROUP BY domaine.réf_domaine, domaine.nom_domaine)
  12. GROUP BY réf_domaine, nom_domaine;

Reply

Marsh Posté le 28-09-2005 à 12:01:59   

Reply

Marsh Posté le 28-09-2005 à 12:05:23    

Beegee a écrit :

Attention de bien utiliser UNION ALL et pas UNION (qui fait en réalité un DISTINCT dans le groupement des résultats ...).


 
ah, voilà, c'est le union all que je cherchais...pour éviter mon bidouillage de colonnes.[:petrus75]


Message édité par skeye le 28-09-2005 à 12:05:48
Reply

Marsh Posté le 28-09-2005 à 13:28:39    

Merci BEAUCOUP :d

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed