PL / SQl问题,oracle 9i

时间:2011-07-19 19:58:13

标签: oracle plsql oracle9i

好的,我们的项目中有一个情况。我们有一个客户放置的订单,它被分成多个订单。我们需要找出它分成多少订单。

表结构如下:

Order_Orig       Order_next  Sr #
1                     2        1
2                     3        2
3                     4        3

因此,在上面的示例中,我们将订单1放在客户处,并将其拆分为1,2,3,4个订单,并以上述格式存储在表中。 那么我们如何找出初始订单分成多少订单?

TIA

2 个答案:

答案 0 :(得分:1)

也许这可以通过使用分层查询引导您朝着正确的方向前进。

这里有一些详细的例子!

Hierarchical queries

答案 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答案中的链接。

希望这会有所帮助......