私はこのようなCTEを持っています:
WITH CTE(PartNum, RowIndex) AS
(
-- Anchor Member
SELECT
PartNum
,CAST(OurQty AS INT) AS RowIndex
FROM dbo.RcvDtl
WHERE OurQty > 0
UNION ALL
-- Recursive Member
SELECT
PartNum
,RowIndex - 1
FROM CTE
WHERE RowIndex - 1 > 0
)
SELECT
tbl1.PONum, tbl1.PartNum,
CAST(tbl1.OurQty AS INT) AS Quantity,
tbl2.RowIndex AS RowIndex
FROM
dbo.RcvDtl AS Tbl1
INNER JOIN
CTE AS Tbl2 ON Tbl1.PartNum = Tbl2.PartNum
WHERE
tbl1.PONum = '63'
ORDER BY
Tbl1.PartNum OPTION(MAXRECURSION 1000)
次のテーブルで実行されます。
| PartNum | Quantity
---------------------
10050857 6
10050886 10
10050923 24
クエリの考え方は、数量に基づいてレコード (PartNum) を複製することです。クエリは、最初の PartNum '10050857' を 46 レコード (6+(6+10+24)) だけ複製し、2 番目の PartNum '10050886' は予想どおり 10 レコードだけ複製し、最後の部分番号 '10050923' を複製します。予想通り 24 レコード。
最初のレコードに続くレコードの累積によって、クエリが最初のレコードを複製するのはなぜですか?