我正在尝试编写一个SQL语句来获取父级中所有子级的值的总和:
SELECT parent, child, sum(val)
FROM table_a
GROUP BY parent, child
ORDER BY parent, child
这给了我:
Parent1 Child1 123
Parent1 Child2 456
Parent2 Child1 789
Parent3 Child1 12
Parent3 Child2 345
我想要的是获取所有孩子,而不仅仅是每个父母的父母下面的孩子,如果没有记录,则为其分配值0。例如:
Parent1 Child1 123
Parent1 Child2 456
Parent2 Child1 789
Parent2 Child2 0
Parent3 Child1 12
Parent3 Child2 345
我可以使用GROUP BY子句吗?或者我需要使用子查询吗?
答案 0 :(得分:0)
您将不得不自己交叉加入table_a,然后跨合成行执行您的组。我不确定Oracle语法,否则我会写一些实际的代码。
答案 1 :(得分:0)
您可以使用内联视图强制解决问题,但这可能效率很低
SQL> ed
Wrote file afiedt.buf
1 with t as (
2 select 1 parent, 1 child, 123 val from dual union all
3 select 1, 2, 456 from dual union all
4 select 2, 1, 789 from dual union all
5 select 3, 1, 12 from dual union all
6 select 3, 2, 345 from dual
7 )
8 select p.parent, c.child, nvl(sum(val),0)
9 from (select distinct parent from t) p
10 cross join (select distinct child from t) c
11 full outer join t on (t.parent = p.parent and t.child = c.child)
12* group by p.parent, c.child
SQL> /
PARENT CHILD NVL(SUM(VAL),0)
---------- ---------- ---------------
2 1 789
1 2 456
3 1 12
1 1 123
2 2 0
3 2 345
6 rows selected.