【问题标题】:Add a row number using window functions使用窗口函数添加行号
【发布时间】:2013-09-28 15:39:06
【问题描述】:

我在输入中有下表:

FootnoteField 脚注文本
Field1 blabla
字段2 blabla
Field3 blabla
Field4 zzzzzzzzzz
Field5 blablabla
Field6 地坪

如何添加一个增量整数列,为 FootnoteText 相同的行分配相同的整数?这就是我希望在这里实现的目标:

脚注字段脚注文本编号 Field1 blabla 1 Field2 blabla 1 Field3 blabla 1 Field4 zzzzzzzzzz 2 Field5 blablabla 3 Field6 地坪 4

【问题讨论】:

  • 什么版本的 SQL Server?
  • 你需要这个按FootnoteField排序的号码吗?

标签: sql sql-server window-functions


【解决方案1】:

如果您不需要 FootnoteField 订购的数据,您可以使用 GoatCo 回答。

但如果你这样做了:

with cte as (
    select
        FootnoteText, FootnoteField,
        min([FootnoteField]) over(partition by FootnoteText) as min_FootnoteText
    from Table1
)
select 
    FootnoteText, FootnoteField,
    dense_rank() over(order by min_FootnoteText)
from cte

sql fiddle demo

【讨论】:

  • @GoatCO 该死的,谢谢,想想最近的累计金额以及它在 SQL Server 2008 中是如何不起作用的:(
【解决方案2】:

你可能想要DENSE_RANK():

SELECT *, DENSE_RANK() OVER(ORDER BY FootnoteText)
FROM YourTable

如果你想为某个组中的每个值重新编号,你只需要PARTITION BY,即我希望每天从0开始编号,所以PARTITION BY Some_Date

演示:SQL Fiddle

【讨论】:

  • 请用它创建 sqlfiddle 演示 :)
  • 来了... sql fiddle 有问题
  • 也试图创建一个小提琴来证明你是对的.. 在 sqlexpress 上工作 - 很好,到 ddl 的文本仍然有效;)
  • 小提琴发布。如果它是按 FootnoteField 排序的,每一行都会有不同的值。
  • @GoatCO 这不是我要说的。在带有 blablabla 的 OP 输出行中,编号为 3,在您的输出中,编号为 2
猜你喜欢
  • 1970-01-01
  • 2021-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-16
相关资源
最近更新 更多