我显然不明白为什么PARTITION BY存在。我认为它应该按特定列对结果进行分组(分区),这样如果对该列应用row_number(),它将对项目的组(分区)进行编号。
事实显然并非如此。有人能向我解释一下,分区应该做什么吗?
在X列被编号/计数的情况下,我如何实现预期的结果?
WITH cte(X,Y) AS
(
SELECT 10 AS X, 1 AS Y UNION ALL
SELECT 10 AS X, 2 AS Y UNION ALL
SELECT 10 AS X, 3 AS Y UNION ALL
SELECT 10 AS X, 4 AS Y UNION ALL
SELECT 10 AS X, 5 AS Y UNION ALL
SELECT 20 AS X, 1 AS Y UNION ALL
SELECT 20 AS X, 2 AS Y UNION ALL
SELECT 20 AS X, 3 AS Y UNION ALL
SELECT 20 AS X, 4 AS Y UNION ALL
SELECT 20 AS X, 5 AS Y
)
SELECT cte.*,
ROW_NUMBER() OVER (PARTITION BY cte.X ORDER BY cte.X) AS [GROUP_NUMBER]
FROM cte
实际结果:
X Y GROUP_NUMBER
10 2 1
10 3 2
10 4 3
10 5 4
10 1 5
20 1 1
20 2 2
20 3 3
20 4 4
20 5 5
预期结果:
X Y GROUP_NUMBER
10 2 1
10 3 1
10 4 1
10 5 1
10 1 1
20 1 2
20 2 2
20 3 2
20 4 2
20 5 2