2017-10-16 8 views
0

Je cherche à exécuter les deux requêtes suivantes en une seule requête et je ne sais pas comment procéder. Cette (1 rangée de DATA1, DATA2, DATA3 par ID):Exécution d'une extraction normale et d'une somme() dans la même requête SQL

SELECT 

ID 
DATA1 
DATA2 
DATA3 

FROM TABLE1 

Et ceci (plusieurs lignes de données 4 et données5 par ID):

SELECT 

TABLE1.ID 
SUM(TABLE2.DATA4) 
SUM(TABLE2.DATA5) 

FROM TABLE1 

JOIN TABLE2 
ON TABLE2.ID = TABLE1.ID 

GROUP BY ID; 

Pour où la sortie est une table unique (100k ~ rows) avec les colonnes: ID, DATA1, DATA2, DATA3, SOMME (DATA4), SUM (DATA5).

Est-ce possible? J'ai essayé d'utiliser UNION et il dit que j'ai besoin des mêmes expressions pour chaque requête, ce qui est logique. Utilisateur SQL intermédiaire, donc je ne suis pas sûr de savoir quoi d'autre à y jeter.

Merci!

Répondre

0

Vous pouvez ajouter les colonnes supplémentaires à la select et group by:

SELECT t1.ID, t1.DATA1, t1.DATA2, t1.DATA3, 
     SUM(t2.DATA4), SUM(t2.DATA5) 
FROM TABLE1 t1 JOIN 
    TABLE2 t2 
    ON t2.ID = t1.ID 
GROUP BY t1.ID, t1.DATA1, t1.DATA2, t1.DATA3; 
0

Si vous voulez la somme groupée uniquement sur ID vous pouvez effectuer la somme comme un sous-select et se joindre à nouveau dans la requête principale:

SELECT t1.ID, t1.DATA1, t1.DATA2, T1.DATA3, ss.TOT_DATA4, ss.TOT_DATA5 
    FROM TABLE1 t1 
    INNER JOIN (SELECT ID, SUM(DATA4) AS TOT_DATA4, SUM(DATA5) AS TOT_DATA5 
       FROM TABLE1 
       GROUP BY ID) ss 
    ON ss.ID = t1.ID 

Fait de cette manière que vous obtiendrez les mêmes valeurs à SUM_DATA4 et SUM_DATA5 pour chaque valeur si ID, quels que soient les DATA1, DATA2, et les valeurs de Data3.

Bonne chance.