简体   繁体   English

仅当另一列的值更改 sql server 时才自动增加值

[英]Auto-increment the value only when the value of another column changes sql server

Let's say I have this (SQL server) database, sorted by value A and value B should be incremented only when the value A gets change:假设我有这个(SQL 服务器)数据库,按值 A 排序,只有当值 A 发生变化时,值 B 才应增加:

BillNo Value B BillNo 值 B
SC-P1100 1 SC-P1100 1
SC-P1100 1 BillNo changes SC-P1100 1 票据无变化
SC-blb00 2 BillNo changes SC-blb00 2 法案无变化
SC-P6010 3 SC-P6010 3
SC-P6010 3 SC-P6010 3
SC-P6010 3 BillNo changes SC-P6010 3 条例草案无变化
SB-T1810 4 SB-T1810 4

How do I select the rows in the above manner?如何以上述方式选择行? Please answer请回答

Thanks谢谢

You can do it like this你可以这样做

UPDATE tableA   
  SET BillNo='new value'
  , ValueB=ValueB+1
  WHERE BillNo='Old value';

You can use CTE to do that.您可以使用 CTE 来做到这一点。

WITH CTE (Col1, RowNumber)
AS
(
    SELECT <YOUR_COLUMN_NAME_HERE> AS Col1, ROW_NUMBER() OVER (ORDER BY Col1) As RowNumber
    FROM <YOUR_TABLE_NAME_HERE>
)

SELECT Col1, 
(
    SELECT COUNT(DISTINCT Col1)
    FROM CTE InnerCTE
    WHERE InnerCTE.RowNumber <= OuterCTE.RowNumber
) As NumberOfDistinctItemsInCol1
FROM CTE OuterCTE

Be sure to replace <YOUR_COLUMN_NAME_HERE> with your actual column name and <YOUR_TABLE_NAME_HERE> with your actual table name.请务必将 <YOUR_COLUMN_NAME_HERE> 替换为您的实际列名,将 <YOUR_TABLE_NAME_HERE> 替换为您的实际表名。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM