【问题标题】:Increment value from 1 to onward based on other field in SQL根据 SQL 中的其他字段从 1 递增值
【发布时间】:2022-01-11 21:38:53
【问题描述】:
id result
KLLR 1
KLLR 2
KLLR 3
KLLR 4
OLRQ 1
OLRQ 2
PKRD 1
PKRD 2
PKRD 3

SQL 根据其他字段从 1 递增值,输出计算字段为结果。请查看图像以获得更清晰的信息。下面是我尝试过的 SQL。我希望在另一个计算字段中得到结果,如图所示。

SELECT id, SUM(COUNT(id)) AS result
FROM t1 
GROUP BY id

【问题讨论】:

  • 请适当标记。 MySQL 和 SQL Server 是完全不同的产品,具有不同的 SQL 方言。

标签: sql sql-server sql-server-2012


【解决方案1】:

一个简单的行号应该适合你:

SELECT id,
       ROW_NUMBER() OVER (PARTITION BY id ORDER BY id) AS Result
FROM t1;

您同时标记了 MySQL 和 SQL Server。请注意,它们是完全不同的产品,但同样适用于两者。 MySQL 在 8.0 中引入了ROW_NUMBER()

对汉斯的评论,

SELECT id,
       ROW_NUMBER() OVER (PARTITION BY id ORDER BY (SELECT NULL)) AS Result
FROM t1;

会给你提到的随机排序。

【讨论】:

  • 感谢您的回答。但是,在写完上面的查询“Msg 4112,Level 15,State 1,Line 1 函数 'ROW_NUMBER' 必须有一个带有 ORDER BY 的 OVER 子句之后,我得到了这个错误。”
  • 然后需要知道版本和实际的 RDBMS
  • 您可以添加 order by (SELECT NULL) 以进行随机排序,或者通过指定名称使用您想要排序的任何列
  • 我使用的是 SQL Server 2012。
  • @SalmanSabir 我修复了你的标签。我也修复了我的帖子,请参阅更新。抱歉,我最初忽略了 ORDER BY....
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-16
  • 1970-01-01
  • 1970-01-01
  • 2019-07-11
  • 2023-03-30
  • 1970-01-01
相关资源
最近更新 更多