是否可以通过组内部执行组? 实际上我有一个现有的SQL请求,它返回一些数据,这些数据按子id分组。我想纠正它并按原样显示数据,除了符合条件的某些信息,我想通过父ID显示它们。 请注意,父ID可能包含多个子ID。 你能帮忙吗? 我们考虑下表:
parentID childID value YN AB
1 | 11 |3 |Y |A
1 | 12 |2 |Y |A
2 | 13 |8 |Y |B
3 | 14 |9 |Y |A
实际代码返回Y按cildID分组的值。我想要的是总是返回值列,但有一个额外的条件:如果AB = A然后返回由parentID分组的值的总和,如果不按原样返回(按childid分组)
答案 0 :(得分:1)
您可以在ChildID列上使用CASE
表达式,在AB ='B'时返回childID,否则返回NULL,然后按ParentID和CASE
表达式分组:
with YourData(parentID, childID, value, YN, AB) as (
select 1, 11, 3, 'Y', 'A' from dual union all
select 1, 12, 2, 'Y', 'A' from dual union all
select 2, 13, 8, 'Y', 'B' from dual union all
select 3, 14, 9, 'Y', 'A' from dual
)
select parentID
, case ab when 'B' then childID end childID
, sum(value) value
from YourData
group by parentID
, case ab when 'B' then childID end
order by parentID, childID;
PARENTID CHILDID VALUE
---------- ---------- ----------
1 5
2 13 8
3 9
您还可以使用GROUP BY ROLLUP
来使用适当的HAVING
子句获得相同的结果:
select parentID
, childID
, sum(value) value
from YourData
group by rollup ((parentID, AB), childID)
having (grouping(childID) = 1 and AB = 'A')
or (grouping(childID) = 0 and AB = 'B')
order by parentID, childID;
PARENTID CHILDID VALUE
---------- ---------- ----------
1 5
2 13 8
3 9