【发布时间】:2018-07-18 16:34:52
【问题描述】:
我需要在其层次结构下仅设置一组标志来识别主要通道(层次结构中最高的)。在以下情况下,US 不是有效的主要渠道,因为下面有两个标志。只有 US1、US2、UK 是有效的主要渠道。
如果可能的话,我希望有一个单一查询的解决方案;否则我将探索程序选项。
我尝试了分层查询、分组依据、计数(标志)的一些变体,但不知何故我无法消除“美国”并获得所需的结果。
如果有人可以帮助我为这个用例提供高级方法,我将不胜感激。
输入数据
---------------------------------
channel | flag | parent channel
---------------------------------
US | |
US1 | | US
A1 | yes | US1
A2 | | A1
A3 | | A2
US2 | | US
B1 | | US2
B2 | yes | B1
B3 | | B2
UK | |
C1 | | UK
C2 | | C1
C3 | yes | C2
---------------------------------
使用输入数据的带有标志计数的多个层次结构
---------------------
channel | flag count
---------------------
US | 2
US1 | 1
A1 | 1
A2 | 0
A3 | 0
US2 | 1
B1 | 1
B2 | 1
B3 | 0
UK | 1
C1 | 1
C2 | 1
C3 | 1
----------------
输出
---------------------------------
primary channel
---------------------------------
US1
US2
UK
---------------------------------
【问题讨论】:
-
当 US1 和 US2 都在 US 之下时,为什么它们是“等级最高的”?消除美国并包括英国似乎还可以,但我不明白最终结果中如何包括 US1 和 US2?您将 US 列为根节点(没有父节点)两次,这也令人困惑。
-
参考编辑,我已经添加了中间结果集。您会注意到,通过使用输入数据,我们可以创建多个具有下方标志计数的层次结构。主要通道将是只有一个标志计数的通道,并且应该在层次结构中最高。是的,删除了重复的美国条目。
标签: sql oracle group-by hierarchical-data hierarchical-query