我有一个表,如下所示
|Position | Name | Name_key |
|: ---- |:---- | ---------:|
1 Adult 123
2 Child 555
3 Child 666
4 Adult 456
5 Child 777
6 Adult 789
7 Child 888
8 Child 999
字符串
我想分组在一起,并在末尾添加一个额外的列。每个父子都是按照表中的顺序分组在一起的。所以,例如,Adult 1与child 1一起,Adult 2与child 2和3一起,等等。每个组都需要共享成人的name_entry。所以,类似于这样:
|Position | Name | Name_key | parent_name_key
|: ---- |:---- |: ---------|:--------------
1 Adult 123 123
2 Child 555 123
3 Child 666 123
4 Adult 456 456
5 Child 777 456
6 Adult 789 789
7 Child 888 789
8 Child 999 789
型
我承认(很明显)我是一个SQL新手。我试过使用一些窗口函数和分区的名称,但不能得到任何地方,真的。
我的SQL得到它的初始表看起来像这样:从测试中选择位置,名称,名称_键
5条答案
按热度按时间xam8gpfp1#
我相信像下面这样的相关查询是你想要的,根据你的数据,你想要最大的
Name_Key
,它属于一个在当前位置或之前的成年人:字符串
zour9fqk2#
你可以在没有子查询的情况下用analytic来做:
字符串
yzckvree3#
这里是解决方案。我使用求和窗口函数来实现这一点。我认为可以有一些其他的方法来解决这个问题。
字符串
6l7fqoea4#
在Oracle 12中,可以使用
MATCH_RECOGNIZE
:字符串
其中,对于样本数据:
型
产出:
| 位置|名称|名称_键|页面名称键|
| --|--|--|--|
| 1 |成人| 123 | 123 |
| 2 |孩子| 555 | 123 |
| 3 |孩子| 666 | 123 |
| 4 |成人| 456 | 456 |
| 5 |孩子| 777 | 456 |
| 6 |成人| 789 | 789 |
| 7 |孩子| 888 | 789 |
| 8 |孩子| 999 | 789 |
fiddle
5cnsuln75#
您可以使用MODEL子句(它快速可靠)来创建新列,并在Position之后使用Parent name键:
字符串
维度(此处用作唯一行寻址)已存在于列POSITION中。
RULES子句定义以下项的值: