SQL Server修剪和计数

时间:2018-06-21 08:35:13

标签: sql-server

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

Select * from transaction
where customer = 'AA'

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

我有以下ID:

LV_AAAA_205_123456LV_AAAA_205_123456_E_(您可以看到这是相同的,但是具有 E

这是主要ID。但是,如果此交易已更改,则会更改为下面的ID

LV_AAAA_205_123456_E_(2)

如果再次更改,则看起来像这样

LV_AAAA_205_123456_E_(3),此操作可能会持续进行,具体取决于更改的次数。

我想要的是一个查询,它使我可以查看原始ID到底有多少(2),(3)个实例,以查找这些原始ID被更改了多少次。

我想要一个结束查询,该查询提供给我输出仅已更改的ID的输出以及更改次数的列数,因此ID LV_AAAA_205_123456_E_(4)旁边将有4个计数。

对不起,如果我不清楚,请问清楚。我希望有人能提供帮助。

2 个答案:

答案 0 :(得分:1)

下面的命令应该起作用,因为所有更改的记录都在()的结尾处的括号transactionId中包含数字:

SELECT *,
       TRY_PARSE(REPLACE(SUBSTRING(transactionId,
                                   CHARINDEX('(', transactionId)+1, 
                                   100),
                         ')',
                         '')
                 AS int) AS changeCount
FROM [transaction]
WHERE transactionID LIKE '%(%)'

答案 1 :(得分:1)

尝试此脚本

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'