Sql server 在SQL Server中为记录组添加计数列

Sql server 在SQL Server中为记录组添加计数列,sql-server,increment,Sql Server,Increment,我试图用计数列中每一行记录的单个计数来更新现有表 表中有以下需要递增的列: MBR_NO, CLAIM_N0, Effective_Dt, incr_count 因此,运行前的示例可能如下所示: MBR_NO | CLAIM_N0 | Effective_Dt | incr_count | -------+----------+----------------+------------+ 1 | 2 | 1/1/2015 | NULL | 1

我试图用计数列中每一行记录的单个计数来更新现有表

表中有以下需要递增的列:

MBR_NO, CLAIM_N0, Effective_Dt, incr_count
因此,运行前的示例可能如下所示:

MBR_NO | CLAIM_N0 | Effective_Dt   | incr_count |
-------+----------+----------------+------------+
1      | 2        | 1/1/2015       | NULL       |
1      | 4        | 5/5/2015       | NULL       |
1      | 5        | 6/7/2016       | NULL       |
1      | 7        | 8/7/2016       | NULL       |
2      | 2        | 4/3/2015       | NULL       |
2      | 5        | 5/21/2015      | NULL       |
3      | 8        | 3/27/2015      | NULL       |
我想按MBR\u NO计数,并将递增计数更新为如下所示:

MBR_NO | CLAIM_N0 | Effective_Dt   | incr_count |
-------+----------+----------------+------------+
1      | 2        | 1/1/2015       | 1          |
1      | 4        | 5/5/2015       | 2          |
1      | 5        | 6/7/2016       | 3          |
1      | 7        | 8/7/2016       | 4          |
2      | 2        | 4/3/2015       | 1          |
2      | 5        | 5/21/2015      | 2          |
3      | 8        | 3/27/2015      | 1          |
我需要更改该文件以便稍后处理


我知道这并不复杂,但似乎其他主题提供的解决方案不会进行增量更新。如有任何帮助,将不胜感激。

您可以按以下方式查询:

Select MBR_NO, CLAIM_N0, Effective_Dt,
   incr_count = count(MBR_NO) over(Partition by MBR_NO order by Effective_Dt)
from yourtable
+--------+----------+--------------+------------+
| MBR_NO | CLAIM_N0 | Effective_Dt | incr_count |
+--------+----------+--------------+------------+
|      1 |        2 | 2015-01-01   |          1 |
|      1 |        4 | 2015-05-05   |          2 |
|      1 |        5 | 2016-06-07   |          3 |
|      1 |        7 | 2016-08-07   |          4 |
|      2 |        2 | 2015-04-03   |          1 |
|      2 |        5 | 2015-05-21   |          2 |
|      3 |        8 | 2015-03-27   |          1 |
+--------+----------+--------------+------------+
输出如下:

Select MBR_NO, CLAIM_N0, Effective_Dt,
   incr_count = count(MBR_NO) over(Partition by MBR_NO order by Effective_Dt)
from yourtable
+--------+----------+--------------+------------+
| MBR_NO | CLAIM_N0 | Effective_Dt | incr_count |
+--------+----------+--------------+------------+
|      1 |        2 | 2015-01-01   |          1 |
|      1 |        4 | 2015-05-05   |          2 |
|      1 |        5 | 2016-06-07   |          3 |
|      1 |        7 | 2016-08-07   |          4 |
|      2 |        2 | 2015-04-03   |          1 |
|      2 |        5 | 2015-05-21   |          2 |
|      3 |        8 | 2015-03-27   |          1 |
+--------+----------+--------------+------------+

您可以按以下方式进行查询:

Select MBR_NO, CLAIM_N0, Effective_Dt,
   incr_count = count(MBR_NO) over(Partition by MBR_NO order by Effective_Dt)
from yourtable
+--------+----------+--------------+------------+
| MBR_NO | CLAIM_N0 | Effective_Dt | incr_count |
+--------+----------+--------------+------------+
|      1 |        2 | 2015-01-01   |          1 |
|      1 |        4 | 2015-05-05   |          2 |
|      1 |        5 | 2016-06-07   |          3 |
|      1 |        7 | 2016-08-07   |          4 |
|      2 |        2 | 2015-04-03   |          1 |
|      2 |        5 | 2015-05-21   |          2 |
|      3 |        8 | 2015-03-27   |          1 |
+--------+----------+--------------+------------+
输出如下:

Select MBR_NO, CLAIM_N0, Effective_Dt,
   incr_count = count(MBR_NO) over(Partition by MBR_NO order by Effective_Dt)
from yourtable
+--------+----------+--------------+------------+
| MBR_NO | CLAIM_N0 | Effective_Dt | incr_count |
+--------+----------+--------------+------------+
|      1 |        2 | 2015-01-01   |          1 |
|      1 |        4 | 2015-05-05   |          2 |
|      1 |        5 | 2016-06-07   |          3 |
|      1 |        7 | 2016-08-07   |          4 |
|      2 |        2 | 2015-04-03   |          1 |
|      2 |        5 | 2015-05-21   |          2 |
|      3 |        8 | 2015-03-27   |          1 |
+--------+----------+--------------+------------+

您可以在查询中使用

ROW\u NUMBER()(按MBR分区\u无顺序按有效日期)。

但如果数字发生变化,这有关系吗?i、 在你的例子中,如果你

MBR_NO     EffectiveDate   RowNumber
------------------------------------
2             1/1/2017        1
2             5/1/2017        2
但是,如果您插入了生效日期为2017年3月1日的行,则会更改2017年5月1日行的行号,即

MBR_NO     EffectiveDate   RowNumber
------------------------------------
2             1/1/2017        1
2             3/1/2017        2
2             5/1/2017        3

您可以在查询中使用

ROW\u NUMBER()(按MBR分区\u无顺序按有效日期)。

但如果数字发生变化,这有关系吗?i、 在你的例子中,如果你

MBR_NO     EffectiveDate   RowNumber
------------------------------------
2             1/1/2017        1
2             5/1/2017        2
但是,如果您插入了生效日期为2017年3月1日的行,则会更改2017年5月1日行的行号,即

MBR_NO     EffectiveDate   RowNumber
------------------------------------
2             1/1/2017        1
2             3/1/2017        2
2             5/1/2017        3

是的,我希望这个数字发生本质上的变化,我正在尝试计算成员记录的数量,并在其他地方的循环处理中使用它,好吧,那就这样吧。我可能会说,只需将其添加到视图中,除非您必须将其放在表中,在这种情况下,触发器可能最好只更新与该MBR_NO关联的行。是的,我希望该数字本质上发生变化。我正在尝试计算成员记录的数量,并在其他地方的循环处理中使用该记录,好的,这样就可以了。我可能会说,只要把它添加到视图中,除非你必须将它放在一个表中,在这种情况下,触发器可能最好只更新与该MBRIO号相关联的行,请在提问时考虑格式化。很难阅读你的样本数据,请在提问时考虑格式化。读取样本数据非常困难。这需要排序。。。在没有排序的情况下可以这样做吗?我们需要提供基于至少一个订单的增量计数。这里的要求似乎是有效的。。。这可以是任何订单或需求,但它必须至少有一个排序列,以生成适当的输出。这需要排序。。。在没有排序的情况下可以这样做吗?我们需要提供基于至少一个订单的增量计数。这里的要求似乎是有效的。。。这可以是任何基于订单或需求的,但它必须至少具有“排序”列才能生成适当的输出