【问题标题】:SQL Incremenet and Reset Variable InsertSQL 增量和重置变量插入
【发布时间】:2011-06-20 13:29:25
【问题描述】:

我可能错过了一些简单的问题。然而,像我一样忽略任何小细节。但是我已经搜索了一段时间,没有遇到与我的问题类似的任何东西。

设置: SQL 2005,存储过程。

我有一张表,它会经常因呼叫尝试而更新。使用 UNIQUEIDENTIFIER 将所有记录绑定在一起,即

xxx-xxx-xxx-xxx-xxxx | 20/06/2011 12:00 | 10

我想要一个存储过程来抓取所有记录,并按 UNIQUEIDENTIFIER 对它们进行排序,同时为尝试生成一个计数器。即

1111-1111-1111-1111    | 20/06/2011 12:05    |  10 | 0    
1111-1111-1111-1111    | 20/06/2011 12:06    |  30 | 1   
2222-2222-2222-2222    | 20/06/2011 12:10    | 120 | 0  
3333-3333-3333-3333    | 20/06/2011 12:20    |  50 | 0

从上面可以很容易地识别呼叫尝试并添加号码。不过我可能很傻。

感谢任何帮助。

问候 克里斯

【问题讨论】:

  • 您是否需要在 INSERT 期间计算最后一列的值,对旧表进行追溯计算,或两者都计算?

标签: sql sql-server-2005 stored-procedures count


【解决方案1】:

您可以使用ROW_NUMBER

例如

SELECT ID, DateField, FieldA, 
    ROW_NUMBER() OVER(PARTITION BY ID ORDER BY DateField ASC) AS Counter
FROM YourTable
ORDER BY ID, DateField

PARTITION BY 基本上为每个不同的 ID 重置计数器,并且以下 ORDER BY 确保计数器按 Date 字段递增排序。请注意,这将是一个每次从 1 开始的计数器。如果你想让它从 0 开始,你可以在 SELECT 中减去 1

【讨论】:

  • 非常感谢,PARTITION BY 很有帮助。
【解决方案2】:

你不能在 SQL 中使用“group by”子句(带计数) 吗?

您可以使用“order by”来执行排序(尽管 SQL 如何实现该排序或它的用途不是很明显)

此外,问题标题似乎与您所问的不匹配。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-29
    • 1970-01-01
    • 1970-01-01
    • 2012-03-07
    • 1970-01-01
    • 2010-12-12
    • 1970-01-01
    相关资源
    最近更新 更多