Select 轮次排序 table?
Select order by round table?
我有一个 table 像这样的:
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 轮到 select 的好的语句?这意味着我需要 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
你可以试试这个:
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;
你可以这样做:
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 排序。此外,您可以在子查询中使用它,以便 select 您刚刚在结果集中创建的“回合”。为确保它也按 single_tag 排序,您可以将它添加到主查询的末尾。
我有一个 table 像这样的:
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 轮到 select 的好的语句?这意味着我需要 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
你可以试试这个:
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;
你可以这样做:
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 排序。此外,您可以在子查询中使用它,以便 select 您刚刚在结果集中创建的“回合”。为确保它也按 single_tag 排序,您可以将它添加到主查询的末尾。