【问题标题】:sql increment value on every row [closed]每行的sql增量值[关闭]
【发布时间】:2012-03-26 17:20:26
【问题描述】:

到底如何,我如何在不使用 ROW_NUMBER 的情况下计算一行(因为我使用 15 个连接并且 row_number 返回愚蠢的值)。

在进行 15 次连接后 .. 查询将选择 4 或 5 行,我需要为它们添加一个计数器,例如 1、2、3、4、5。

我已尝试使用 ROW_NUMBER,但它不适合这里?是否有一个函数可以计算输出的每一行?

我还尝试了 declare @inc int set @inc = 0 并在 select 语句中:select @inc:=@inc+1 as incselect @inc = @inc + 1 as inc 并且不起作用(Incorrect syntax near ':'.

【问题讨论】:

  • 您应该向我们展示您的查询。
  • 查询有 150 行 .. 表有超过 1000 万条记录
  • ROW_NUMBER() 有效。试试ROW_NUMBER()OVER(ORDER BY SameOrderAsQuery)As RowNumber。不管你的桌子有多大。
  • 我不知道如何订购,因为我想按 start_date 订购 .. 并且 start_date 是在 CASE WHEN END as start_date 中生成的
  • @purfos:您可以在ROW_NUMBER 函数中使用相同的CASE

标签: sql sql-server tsql


【解决方案1】:

来自 cmets:

ROW_NUMBER() 应该可以工作,不管你的桌子有多大。

我不知道如何订购,因为我想在 start_date 之前订购 .. 并且 start_date 在 CASE WHEN END 中生成为 start_date

你也可以在ROW_NUMBER函数中使用CASE

SELECT  ROW_NUMBER() 
    OVER
    ( ORDER BY 
        ( CASE WHEN ... END ) DESC, 
        ( CASE WHEN ... END ) ASC 
    ) AS RowNumber
....

编辑:我在您的查询中看不到Order By,因此顺序不可预测(取决于优化器)。因此,我建议将 order by 应用于外部查询,与 ROW_NUMBER 中的相同。

【讨论】:

  • 看 .. 它输出这个:282036, 2140900, 2142724, 2146320
  • @pufos:这些值有什么问题?如果您的查询返回这么多行。也许您在内部查询中使用 Row_Number,该查询在外部查询中分组。
  • 我需要返回1、2、3、4,快..
  • @pufos:您应该订购您的查询(编辑我的答案)。
  • 我需要是 1, 2, 3, 4, ... 不是 129348743
【解决方案2】:

ROW_NUMBER() 正是你想要的,听起来你用错了——在你的OVER() 中你应该只有一个ORDER BY

还有 15 个连接表明您的架构有点混乱。

【讨论】:

  • 我不知道如何ORDER BY,因为我想按 start_date 订购.. start_date 是在 CASE WHEN END as start_date 中生成的
  • 然后将生成该列的查询部分嵌套到嵌套选择中。然后,您的外部查询中将只有一个列名。
  • 它输出像 244343 而不是 1 , 2 , 3 , 4 的值
猜你喜欢
  • 1970-01-01
  • 2021-02-05
  • 2013-09-05
  • 2020-11-16
  • 2023-03-07
  • 1970-01-01
  • 2014-08-22
  • 1970-01-01
  • 2016-08-11
相关资源
最近更新 更多