我下面有一个非常棘手的场景,如果有人可以提供帮助,我会非常感激。
我有两张桌子:
TX
TX_External
TX有两列:ID& Date_Reported
TX_External有两列:ID& Date_Received
基本上我想找到TX_external的Date_Received与TX表的Date_Reported之间的天数差异。它必须是工作日(没有周末或银行假日)。
所以我的最终输出应该是这样的
客户ID | Days_Taken
主要问题。 我的主要问题是两个表中的id都有所不同,例如:
Tx-ID = AB_123456_ABC
TX_External- ID = AB_123456
因为您可以看到它们是相似的并且引用相同的事务,但TX表ID在" _ABC"的版本中的数字之后附加了随机附加内容。这可能是额外的数字字母括号等(所以AB_123456_ABC,AB_123456_E(1),AB_123456_H等)。为了增加混淆,ID不是一致的大小,即它们都不是AB_123456,因为有些可能是AB_12345678! 因此修剪到第二个_并修剪
我如何修剪它以便我可以得到它与Tx_External ID(AB_123456)完全相同然后这将让我做一个匹配所以对于那个确切的ID,我可以计算所采取的工作日?我可以在一个查询中完成所有操作吗?
对于提前大量描述感到抱歉,非常乐意进一步解释。
答案 0 :(得分:0)
select * from tx a
cross apply (select case when a.ID like '%[_]%[_]%' then
replace(a.ID, reverse(left(reverse(a.ID), charindex('_', reverse(a.ID)))), '')
else a.ID end txstripped)b
join TX_External c cross apply (select case when c.ID like '%[_]%[_]%' then
replace(c.ID, reverse(left(reverse(c.ID), charindex('_', reverse(c.ID)))), '')
else ID end txexternal_stripped)d
on b.txstripped=d.txexternal_stripped