【问题标题】:Azure SQL Database Row Number not working properlyAzure SQL 数据库行号无法正常工作
【发布时间】:2019-11-13 21:08:48
【问题描述】:

我正在尝试在 Azure SQL 数据库实例上运行 ROWNUMBER。它只是行不通。

;WITH cteA AS
(
    SELECT 1 as Test1, 2 as Test2, 3 as Test3
    UNION ALL Select 1, 1, 1
    UNION ALL Select 1, 1, 1
    UNION ALL Select 2, 1, 3
    UNION ALL Select 2, 1, 3
)
SELECT
    *,
    ROW_NUMBER() OVER (PARITION BY a.test1 ORDER BY A.test1) AS RN
FROM 
    cteA A

这是我得到的输出:

Test1   |Test2   |Test3   |RN
1       |1       |1       |1
1       |1       |1       |2
1       |2       |3       |3
2       |1       |3       |1
2       |1       |3       |2

不知道为什么?我希望 RN 为 1-1-1-2-2

【问题讨论】:

  • PARTITION BY a.test1 创建具有相同值的行的“分区”(或“组”/“桶”) - 这里一组包含所有 test1 = 1 行,另一组包含test1 = 2。在每个组中,行从 1 开始连续编号 - 这就是为什么您会得到您所看到的结果(这些结果是正确 - 考虑到您编写的代码)

标签: sql sql-server azure azure-sql-database row-number


【解决方案1】:

鉴于您的预期结果,我认为您确实想要:

DENSE_RANK() OVER(ORDER BY A.test1)

这会为您提供一个递增数字,每次 Test1 更改时都会增加 1。

Demo on DB Fiddle

测试1 |测试2 |测试3 |注册护士 ----: | ----: | ----: | :- 1 | 1 | 1 | 1 1 | 1 | 1 | 1 1 | 2 | 3 | 1 2 | 1 | 3 | 2 2 | 1 | 3 | 2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多