我有一個像這樣的表A:
WcsID Single_long, Single_short, Single_tag
1001 100 100 A
1002 100 100 A
1003 100 100 A
1004 100 100 B
1005 100 100 B
1006 100 100 B
1007 100 100 C
1008 100 100 C
是否有一個好的 SQL 陳述句可以在標簽上選擇回合?這意味著我需要 ABC 作為一輪,在上面的示例中有 3 輪。我需要先按輪次排序,然后在該輪次中的 WcsID,結果應該是這樣的:
-- round 1
1001 A
1004 B
1007 C
-- round 2
1002 A
1005 B
1008 C
-- round 3
1003 A
1006 B
uj5u.com熱心網友回復:
你可以這樣做:
SELECT sorted.wcsID, sorted.single_tag,
sorted.sort AS currentRound
FROM (
SELECT wcsID, single_tag,
RANK() OVER (PARTITION BY single_tag ORDER BY wcsID) AS sort
FROM a
) AS sorted
ORDER BY sorted.sort, sorted.single_tag;
該RANK功能非常適合您進行此類排序,因為它允許按您命名為“round”的內容以及 wcsID 進行排序。此外,您可以在子查詢中使用它,以便同時選擇您剛剛在結果集中創建的“回合”。為確保它也按 single_tag 排序,您只需將其添加到主查詢的末尾即可。
uj5u.com熱心網友回復:
你可以試試這個:
CREATE TABLE test(col1 int, col2 varchar(10), col3 varchar(10), col4 varchar(10));
INSERT INTO test(col1, col2, col3, col4)
VALUES (1001, 100, 100, 'A'),(1002, 100, 100, 'A'),(1003, 100, 100, 'A'),(1004, 100, 100, 'B'),(1005, 100, 100, 'B'),(1006, 100, 100, 'B'),(1007, 100, 100, 'C'),(1008, 100, 100, 'C');
SELECT *
FROM (
SELECT col1, col2, col3, col4
, RANK() OVER (PARTITION BY Col4 ORDER BY Col1 ) rank
FROM test
) A
ORDER BY rank;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/479625.html
上一篇:.NET-獲取兩個日期之間的資料
