首页 > 解决方案 > SQL Server 修剪和计数

问题描述

我在下面有一个简单的选择:

Select * from transaction
where customer = 'AA'

我得到的结果是几列,其中包含公司名称、电子邮件地址、交易价值、日期以及交易 ID。现在这是重要的一点,我想编写一个查询,我可以在其中获取事务 ID 列表作为计数。但是,id 的最后几个数字彼此不同:

IE

我有以下 id:

LV_AAAA_205_123456LV_AAAA_205_123456_E_ (如您所见,这是相同的,但有E

这是主标识。但是,如果此事务已更改,则它会更改为下面的 id

LV_AAAA_205_123456_E_(2)

如果它再次改变,那么它看起来像这样

LV_AAAA_205_123456_E_(3)这取决于它改变了多少次。

我想要的是一个查询,它允许我通过查看由于它们的 id 而最后具有 (2)、(3) 的实例来查找这些原始 id 被更改了多少次。

我想要一个结束查询,它只给我一个已更改的 id 的输出以及已更改次数的列计数,因此 idLV_AAAA_205_123456_E_(4)旁边的计数为 4。

对不起,如果我不清楚,请询问我的清楚。我希望有人能帮帮忙。

标签: sql-server

解决方案


试试这个脚本

select 
    case 
      when transactionId like '%_E_%' 
      then isnull(TRY_PARSE(REPLACE(substring(transactionId, CHARINDEX('_E_(', transactionId, 0) + 4, LEN(transactionId)) , ')', '') as int), 1)
      else 0 
    end as ChangedTimes
from transaction
where customer = 'AA'

推荐阅读