У вашей модели данных есть некоторые проблемы, потому что, если вы ожидаете такого вывода, вам действительно следует отслеживать некоторые другие столбцы, которые сохраняют групповой порядок. При этом мы могли бы использовать ROW_NUMBER
здесь, чтобы удовлетворить ваши требования:
WITH cteB AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY ReceiptID, SkuID ORDER BY Qty) rn
FROM TableB
),
cteC AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY ReceiptID, SkuID ORDER BY OrderNo) rn
FROM TableC
)
SELECT A.ReceiptID, B.SkuID, B.Qty, C.OrderNo
FROM TableA a
INNER JOIN cteB b
ON b.ReceiptID = a.ReceiptID
INNER JOIN cteC c
ON c.ReceiptID = a.ReceiptID AND
c.SkuID = b.SkuID AND
c.rn = b.rn
WHERE
a.ReceiptID = 'A0001';
Demo
Внимательно обратите внимание на logi c Я здесь использую. Я представляю в виде CTE фиктивный столбец rn
в таблицах B и C, который используется для различения повторяющихся записей (в отношении получения и SKU). В идеале ваши исходные таблицы должны содержать такие столбцы, а не использовать приведенный выше объемный запрос.