1
我已阅读了这个问题的一些变化,但解决方案似乎并没有工作。Dense_Rank ordering
我希望为每个“OrderNo”&“GroupID”动态地创建一个“子组”。 (预期结果)
OrderNo OrderLine GroupID Subgroup
------------------------------------
10463 1 798 1
10463 2 799 2
10463 3 797 3
10463 5 65 4
10463 6 65 4
10463 7 65 4
10481 4 917 1
10481 5 918 2
10481 6 131 3
10481 7 131 3
10481 8 131 3
10481 9 130 4
我用DENSE_RANK()创建正确的组下方,但排序(和等级)是完全不正确的:亚群应以“订单行”,如订购。
SELECT
OrderNo, OrderLine, GroupID,
DENSE_RANK() OVER (PARTITION BY OrderNo ORDER BY GroupID) AS Subgroup
FROM
#temptable
ORDER BY
OrderNo, OrderLine;
输出:
OrderNo OrderLine GroupID Subgroup
------------------------------------
10463 1 798 3
10463 2 799 4
10463 3 797 2
10463 5 65 1
10463 6 65 1
10463 7 65 1
10481 4 917 3
10481 5 918 4
10481 6 131 2
10481 7 131 2
10481 8 131 2
10481 9 130 1
查询:
-- Temp tables
CREATE TABLE #temptable
(
OrderNo varchar(5),
OrderLine int,
GroupID int
);
INSERT INTO #temptable (OrderNo, OrderLine, GroupID)
VALUES ('10463', '1', '798'), ('10463', '2', '799'),
('10463', '3', '797'), ('10463', '5', '65'),
('10463', '6', '65'), ('10463', '7', '65'),
('10481', '4', '917'), ('10481', '5', '918'),
('10481', '6', '131'), ('10481', '7', '131'),
('10481', '8', '131'), ('10481', '9', '130');
不幸的是'GroupID'并不总是按顺序排列的。 _Subgroups应该按“OrderLine”排序_但当然这会导致结果偏差 –
使用MIN(OrderLine)非常巧妙的解决方案,我的联接(使用多个值)正在以指数形式增长数据集,并且我没有追求这条途径。 谢谢! –