你如何获得递归生成的最后一条记录
How do you get the last record generated in a recursive
我在下面的代码中使用 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
这 return 就像附件截图中的结果。我只想要 select 每个 level.If 的底线没有 child 然后 select 它。但如果有 child 则将转到最新级别并选择最新级别。我还绘制了我需要在屏幕截图中 select 的黄色行。
如果我理解你的要求...
在最终查询中只需添加以下内容 WHERE
... Where productID not in (Select Distinct ISNULL(MainProductID,-999) From products)
我在下面的代码中使用 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
这 return 就像附件截图中的结果。我只想要 select 每个 level.If 的底线没有 child 然后 select 它。但如果有 child 则将转到最新级别并选择最新级别。我还绘制了我需要在屏幕截图中 select 的黄色行。
如果我理解你的要求...
在最终查询中只需添加以下内容 WHERE
... Where productID not in (Select Distinct ISNULL(MainProductID,-999) From products)