将匹配的子字符串水平地“折叠”两列为一列

时间:2019-03-27 14:09:29

标签: sql-server-2008

我的查询生成的表如下所示:

Unit25  Unit26  Seconds25  Seconds26
A2501   null     383042     null
A2502   A2602    354554     35147
A2503   A2603    344021     33388
A2504   null     359453     null
A2505   null     16702      null
A2507   null     14784      null
null    A2608    null       16997
A2509   A2609    13092      358893
null    A2610    null       291256
A2511   A2611    18770      369082
A2512   A2612    8647       null
A2513   null     65214      null

A25通过其后两位数字的子字符串与相应的A26匹配。 但是,我想将那些A25和A26列合并成这样:

Unit    TotalSeconds
01       383042
02       389701
03       377409
04       359453
05       16702
07       14784
08       16997
09       371985
10       291256
11       387852
12       8647
13       65214

我可以通过使用ISNULL将这些空值转换为0并将Seconds25和Seconds26加在一起来获得TotalSeconds,但是我不确定如何将Unit25和Unit26转换为子字符串的一列。有什么建议吗?

2 个答案:

答案 0 :(得分:0)

将两列合并(或为非空),以便始终获得一个值,而与哪一个无关。获取数据的长度,然后对最后两个字符进行字符串处理,以长度-1开始获取两个字符。例如,“ A2501”的长度为5,因此您要从位置4的子字符串中获得01。

SUBSTRING(Coalesce(Unit25, Unit26), Len(Coalesce(Unit25, Unit26)) - 1, 2)

答案 1 :(得分:0)

您可以尝试一下。

"Version": 1.0.6,