【问题标题】:How do you get the last record generated in a recursive如何获取递归生成的最后一条记录
【发布时间】:2017-03-27 17:58:15
【问题描述】:

我在下面的代码中使用 sql 2014 中的递归。

 WITH products AS 
(
 SELECT 
     prd.productID, 
     prd.MainproductID,
     prc.Price,Level = 0, 
     Row_ID = CAST(ROW_NUMBER() OVER (ORDER BY prd.productID) AS VARCHAR(MAX)),
     Level2 = CAST(prd.productID AS VarChar(Max))  
FROM  
  PrdTable prd 
INNER JOIN prd_priceList (NOLOCK) prc ON prd.productID= prc.productID  
WHERE prd.MainproductID IS NULL
UNION ALL
SELECT 
    prd.productID, 
    prd.MainproductID,
    prc.Price,Level +1,
    prcRec.Row_ID + '.' + CAST(ROW_NUMBER() OVER (PARTITION BY prd.MainproductID ORDER BY prd.productID) AS VARCHAR(MAX)),
    Level2 = CAST(prcRec.productID AS VarChar(Max))   + ', ' + prcRec.Level2 
FROM  
  products prcRec 
INNER JOIN PrdTable prd ON prcRec.productID= prd.MainproductID
INNER JOIN prd_priceList (NOLOCK) prc ON prd.productID= prc.productID   

 )  
select  
   productID  , 
   MainproductID , 
   Level,
   Row_ID,
   Level2 
from prodproductsucts

这会导致附件截图的结果。我只想选择每个级别的底线。如果没有孩子,那么将选择它。但如果有孩子,那么将进入最新级别并选择最新的。我还绘制了需要在屏幕截图中选择的黄色行。

【问题讨论】:

    标签: sql sql-server tsql common-table-expression recursive-query


    【解决方案1】:

    如果我了解您的要求...

    在最后的查询中添加以下WHERE

    ... Where productID not in (Select Distinct ISNULL(MainProductID,-999) From products)
    

    【讨论】:

    • 我添加了 ISNULL 语句,然后它适用于这个示例。如果可行,我将使用整个数据进行测试并接受它作为答案。 ... Where productID not in (Select Distinct ISNULL(MainProductID ,-999) From products)
    猜你喜欢
    • 2010-09-07
    • 1970-01-01
    • 2012-01-23
    • 1970-01-01
    • 2023-03-16
    • 2012-04-11
    • 2015-01-29
    • 1970-01-01
    相关资源
    最近更新 更多