2010-10-07 6 views
1

J'ai les tableaux suivants dont j'ai besoin pour trouver la somme.Comment puis-je retourner la somme pour cette requête?

Tableau A


ID Name 
1 Jason 
2 Peter 
3 Ravi 

Tableau B


ID ID_SEC 
1 11 
1 12 
1 13 
2 21 
2 22 
2 23 
3 31 
3 32 
3 33 

Tableau C


ID_SEC Value Include_Ind 
11 100   Y 
12 200   Y 
13 300   N 
21 10   Y 
22 20   N 
23 30   N 
31 1000  N 
32 2000  N 
33 3000  N 

sortie


ID Name Total Include_Ind_count [only count when Y] 
1 Jason 600  2 
2 Peter 60  1 
3 Ravi 6000  0 
+0

Je suppose que cela fonctionne - SELECT a.id, a.name, SUM (c.value) Total, compter (include_ind) DE TABLE_A un REJOIGNEZ TABLE_B b ON b.id = a.id JOIN TABLE_C c ON (c.id_sec = b.id_sec et c.include_ind = 'Y') GROUP BY a.id, a.name – jagamot

+0

Voir la réponse d'APC. –

Répondre

3

Utilisation:

SELECT a.id, 
     a.name, 
     SUM(c.value) AS total 
    FROM TABLE_A a 
    JOIN TABLE_B b ON b.id = a.id 
    JOIN TABLE_C c ON c.id_sec = b.id_sec 
GROUP BY a.id, a.name 
1

Vous pouvez utiliser des jointures internes et SUM pour obtenir le résultat - Supposons que vous tableC.Value est le champ int. Sinon, vous avez besoin de le lancer.

SELECT tabA.id, tabA.name, SUM(tabC.value) 
FROM TABLE_A tabA 
INNER JOIN TABLE_B tabB ON tabB.id = tabA.id 
INNER JOIN TABLE_C tabc ON tabC.id_sec = tabB.id_sec 
GROUP BY tabA.id, tabA.name 
3

L'astuce pour compter INCLUDE_IND que lorsque le drapeau est réglé sur « Y » est à utiliser pour tester sa valeur CASE():

SQL> select a.id 
    2   , a.name 
    3   , sum (c.val) as total 
    4   , count(case when c.include_ind = 'Y' then 1 
    5      else null end) as inc_ind_cnt 
    6 from a 
    7   join b on (b.id = a.id) 
    8   join c on (c.id_sec = b.id_sec) 
    9 group by a.name, a.id 
10 order by a.id 
11/

     ID NAME   TOTAL INC_IND_CNT 
---------- ---------- ---------- ----------- 
     1 Jason    600   2 
     2 Peter    60   1 
     3 Ravi    6000   0 

SQL> 

ORDER BY est nécessaire pour garantir l'ordre de tri depuis Oracle a modifié l'algorithme utilisé pour les opérations GROUP BY en 10g.

Questions connexes