2010-10-07 62 views
1

我有以下表格我需要找出总和。如何返回此查询的总和?

表A


ID Name 
1 Jason 
2 Peter 
3 Ravi 

表B


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

表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 

输出


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

我想这个作品 - SELECT a.id, a.name, SUM(c.value)为总,计数(include_ind) FROM TABLE_A一个 JOIN表-B B关于b.id = a.id JOIN TABLE_C c ON(c.id_sec = b.id_sec和c.include_ind ='Y') GROUP BY a.id,a.name – jagamot 2010-10-07 21:03:16

+0

查看APC的答案。 – 2010-10-08 10:02:14

回答

3

用途:

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

您可以使用内部连接和用于获取结果SUM - 假设你tableC.Value为int场。否则你需要施放它。

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

诀窍INCLUDE_IND计数只有当标志被设置为“Y”是使用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要保证排序,因为订购Oracle在10g中更改了它用于GROUP BY操作的算法。