我在下面有一个简单的选择:
Select * from transaction
where customer = 'AA'
我得到的结果是带有公司名称,电子邮件地址,交易价值,日期以及交易ID的几列。现在这很重要,我想编写一个查询,在其中可以获取交易ID列表作为计数。但是,这些ID的最后几个数字彼此不同:
即
我有以下ID:
LV_AAAA_205_123456
或
LV_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个计数。
对不起,如果我不清楚,请问清楚。我希望有人能提供帮助。
答案 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'