3
我有一个CTE这样的:的SQL Server 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 )根据其数量。当查询应该重复6次时,第二部分数字“10050886”由10条记录按预期方式复制第一部分数字“10050857”(46+记录(6 + 10 + 24)),最后一部分数字“10050923”按预期的24记录。
为什么查询通过第一条记录之后的记录累积来复制第一条记录?
它的外观和工作正常 - http://sqlfiddle.com/#!6/0b685/2 –
虽然我已经改变了一些列名称,使其运行。所以你可能在某个地方使用了错误的列,这会导致错误的连接和结果。请仔细检查您的列名(数量<> OurQty?) –
当我在Microsoft SQL Server Management Studio 2012上运行它时,它返回80条记录 – samb90