0
048(70F-Y),045(DDI-Y),454(CMDE-Y)

我在列字段中有上述数据,我需要提取之前的每个数字,所以在上面的示例中,我希望看到 048、045、454。

请注意,在上面的每条记录中,字段中的数据都会发生变化,您有 3 组数字。有时您可能只有一套或 6 套。我只需要捕获位于左侧的所有数字集(

理想情况下,我希望结果显示在如下所示的新列中。我已经尝试了一些事情,但没有得到任何帮助,将不胜感激。

我希望结果如下所示:

+----------+-----------------------------------+---------------+
| EventId  |            PAEditTypes            |     Edits     |
+----------+-----------------------------------+---------------+
|  6929107 | 082(SPA-Y),177(QL-Y)              |      082, 177 |
| 26534980 | 048(70F-Y),045(DDI-Y),454(CMDE-Y) | 045, 048, 454 |
+----------+-----------------------------------+---------------+
4

1 回答 1

0

您可以通过以下步骤获得所需的输出:

  1. 使用string_splitwithcross apply隔离每个项目
  2. 用于left仅获取每个项目的第一部分以及CHARINDEX知道您必须在哪里停下来
  3. 用于STRING_AGG构建最终结果,添加WITHIN GROUP子句以强制排序(如果排序不重要,只需删除WITHIN GROUP子句)

这是一个应该可以工作的 TSQL 示例:

declare @tmp table ( EventId  varchar(50), PAEditTypes varchar(200) )

insert into @tmp values
     ('6929107' ,'082(SPA-Y),177(QL-Y)'             ) 
    ,('26534980','048(70F-Y),045(DDI-Y),454(CMDE-Y)') 

select 
     EventId
   , PAEditTypes
   , STRING_AGG(left(value,CHARINDEX('(',value)-1),', ') WITHIN GROUP (ORDER BY value ASC) as Edits
from 
    @tmp
        cross apply 
    string_split(PAEditTypes, ',')
group by 
      EventId
    , PAEditTypes
order by
    EventId desc

输出:

在此处输入图像描述

于 2019-07-28T12:48:02.817 回答