創建樣本數據(你應該已經做了一部分自己)
CREATE TABLE a
(
ProductNo int,
OrderedBoxes int,
ActualBoxes int,
DespatchOrderNo int
)
INSERT INTO a VALUES
(845121, 5,2, 6194),
(989222, 3,1, 6194)
CREATE TABLE b
(
ProductNo int,
DOTNo int
)
INSERT INTO b VALUES
(845121, 123453),
(845121, 123454),
(845121, 123455),
(989222, 124442),
(989222, 124443)
更新:
假設它是真正的SQL Server 2000 ,我認爲(雖然不能測試)一個動態的SQL解決方案應該可以工這樣的事情(在我的2012版進行測試,不認爲這是什麼2000不能做)
DECLARE @Sql varchar(8000) = ''
SELECT @Sql = @Sql +
'SELECT * FROM (SELECT TOP '+ CAST((OrderedBoxes - ActualBoxes) as varchar) + ' DOTNo, a.ProductNo, DespatchOrderNo
FROM a
INNER JOIN b ON(a.ProductNo = b.ProductNo)
WHERE a.ProductNo = '+ CAST(a.ProductNo as varchar) +'
ORDER BY DOTNo) iq UNION ALL '
FROM a
SET @Sql = LEFT(@Sql, LEN(@Sql) - 10) -- remove the last union all
EXEC(@Sql)
對於或更高版本(和你真的應該升級SQL因爲不再支持2000由微軟), 這裏是一個解決方案與cte
和ROW_NUMBER
:
WITH CTE AS (
SELECT OrderedBoxes - ActualBoxes As Remaining,
DOTNo, a.ProductNo,
DespatchOrderNo,
ROW_NUMBER() OVER(PARTITION BY a.ProductNo ORDER BY DOTNo) RN
FROM a INNER JOIN
b ON(a.ProductNo = b.ProductNo)
)
SELECT DOTNo, ProductNo, DespatchOrderNo
FROM CTE
WHERE RN <= Remaining
輸出:
DOTNo ProductNo DespatchOrderNo
----------- ----------- ---------------
123453 845121 6194
123454 845121 6194
123455 845121 6194
124442 989222 6194
124443 989222 6194
是否可以提供示例輸入表和所需的輸出表? –
您是否需要查詢才能返回僅限一種產品的包裝箱清單? –
請編輯您的問題以包含一些樣品數據和所需結果。 –