【发布时间】: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