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" _によって注文されるべきですが、もちろんこれは結果を歪めています –
私の結合(複数の値を使用して)は指数関数的にデータセットを増やしていましたが、私はこの道を追求しませんでした。 ありがとうございます! –