Select order by round table?



我有一个表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语句来选择圆上标记?这意味着我需要a - b - c作为一轮,在上面的例子中有3轮。我需要先按轮排序,然后在该轮中按WcsID排序,结果应该是这样的:

-- round 1
1001        A
1004        B
1007        C
-- round 2
1002        A
1005        B
1008        C
-- round 3
1003        A
1006        B

你可以这样做:

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排序,您可以在主查询的末尾添加它。

你可以试试:

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;

相关内容

  • 没有找到相关文章

最新更新