0
我真的很困惑如何將這些組分成子組。這是2個訂單的示例(超出〜5M)SQL Server 2012中,秩()和SUM()結束()直到條件
- 訂單可能有一個或多個「分組項目」。
- 組編號= SUM(ItemQuantity)。
- 組通過OrderLine訂購
例如,在下面的表中,我們看到一組「3」 &兩組「2」的
OrderNo OrderLine GroupNo ItemQty
10496 1 3 1 =3
10496 2 3 1 =3
10496 3 3 1 =3
10496 4 2 1 =2(1)
10496 5 2 1 =2(1)
10496 6 2 1 =2(2)
10496 7 2 1 =2(2)
等級()& DENSE_RANK不解決該問題,因爲有同組的倍數,OrderLines是不同的。
我會加入到另一個表到最後,但我想是一種方法來區分相同的組。也許通過添加一個「子組」字段。
OrderNo OrderLine GroupNo ItemQty Subgroup
10496 1 3 1 300
10496 2 3 1 300
10496 3 3 1 300
10496 4 2 1 201
10496 5 2 1 201
10496 6 2 1 202
10496 7 2 1 202
測試下方
CREATE TABLE #temptable(
OrderNo varchar(5),
OrderLine int,
GroupNo int,
ItemQty int);
INSERT INTO #temptable (OrderNo,OrderLine,GroupNo,ItemQty)
VALUES
('10496','1','3','1'),
('10496','2','3','1'),
('10496','3','3','1'),
('10495','1','4','1'),
('10495','2','4','2'),
('10495','3','4','1'),
('10495','4','2','1'),
('10495','5','2','1'),
('10495','6','3','1'),
('10495','7','3','2'),
('10495','8','2','1'),
('10495','9','2','1'),
('10495','10','2','1'),
('10495','11','2','1'),
('10495','12','2','1'),
('10495','13','2','1');
一個DO WHILE
SUM(ItemQty)Over(Partition by OrderNo,GroupNo Order by OrderLine) >= GroupNo
可以工作,但它需要在每一個訂單的每個組中運行。
然後我開始使用XML路徑來查詢每一行,但它真的不會有效。
SELECT distinct t1.OrderNo,t1.GroupNo,
STUFF(( SELECT ',' + QUOTENAME(t2.OrderLine)
FROM #temptable t2
WHERE
t2.OrderNo = t1.OrderNo AND t2.GroupNo = t1.GroupNo
Order by t2.OrderLine Asc
FOR XML PATH(''),TYPE
).value('.', 'NVARCHAR(MAX)') ,1,1,'')
AS [Rows]
FROM #temptable t1
Order by t1.OrderNo,t1.GroupNo
你想要做什麼以及最終的預期產出是什麼? – TheGameiswar
在你的例子中,所有訂單都有'10496' OrderNo,我認爲它們必須是'10496'和'10495' – Backs
是不是唯一的'OrderNo + GroupNo'? (連接爲字符串) –