如何获得递归

时间:2017-03-27 17:58:15

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

我在下面的代码中使用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

这个返回就像附件截图中的结果一样。我只想选择每个级别的底线。如果没有孩子则选择它。但如果有孩子那么将进入最新水平并选择最新水平。我alsa画黄色的行,我需要在截图中选择。 result 's here

1 个答案:

答案 0 :(得分:0)

如果我理解你的要求......

在最终查询中,只需添加以下... Where productID not in (Select Distinct ISNULL(MainProductID,-999) From products)

onchange="showCyclists()