包含辅助组by子句中的所有值

时间:2012-06-19 20:18:25

标签: sql oracle10g group-by

我正在尝试编写一个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子句吗?或者我需要使用子查询吗?

2 个答案:

答案 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.