好的,我们的项目中有一个情况。我们有一个客户放置的订单,它被分成多个订单。我们需要找出它分成多少订单。
表结构如下:
Order_Orig Order_next Sr # 1 2 1 2 3 2 3 4 3
因此,在上面的示例中,我们将订单1放在客户处,并将其拆分为1,2,3,4个订单,并以上述格式存储在表中。 那么我们如何找出初始订单分成多少订单?
TIA
答案 0 :(得分:1)
答案 1 :(得分:1)
正如davidsr所说,你确实需要使用分层查询。
如果您想知道特定订单分成多少订单,那么您可以使用:
SELECT MAX(level) + 1 AS sub_order_number
FROM <order_table>
START WITH order_orig = <orig_order_id>
CONNECT BY PRIOR order_next = order_orig;
使用您提供的表数据并使用1,您将得到sub_order_number为4,orig_order_id为1被分成4个订单。
如果您想查看可以使用的订单:
SELECT order_orig,
order_next,
level
FROM <order_table>
START WITH order_orig = <orig_order_id>
CONNECT BY PRIOR order_next = order_orig;
使用与上述相同的标准,您将得到:
ORDER_ORIG ORDER_NEXT LEVEL
1 2 1
2 3 2
3 4 3
如果您要更改为2,那么您将获得:
ORDER_ORIG ORDER_NEXT LEVEL
2 3 1
3 4 2
您可以为自己测试一下,我使用以下命令将其作为单个查询运行:
WITH t AS (SELECT 1 AS order_orig,
2 AS order_next,
1 AS Sr# FROM DUAL
UNION
SELECT 2 AS order_orig,
3 AS order_next,
2 AS Sr# FROM DUAL
UNION
SELECT 3 AS order_orig,
4 AS order_next,
3 AS Sr# FROM DUAL
)
SELECT order_orig,
order_next,
level
FROM t
START WITH order_orig = 2
CONNECT BY PRIOR order_next = order_orig;
有关分层查询的更多信息,请参阅davidsr答案中的链接。
希望这会有所帮助......