048(70F-Y),045(DDI-Y),454(CMDE-Y)
我在列字段中有上述数据,我需要提取之前的每个数字,因此在上面的示例中,我想查看048、045、454。
请注意,您在上面的每条记录中,字段中的数据都会更改,您有3组数字。有时您可能只有一套或六套。我只需要捕获(
左侧的所有数字集。
理想情况下,我希望结果显示在下面的新列中。我尝试了几件事,但是没有任何帮助将不胜感激。
我希望结果如下所示:
+----------+-----------------------------------+---------------+
| 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 |
+----------+-----------------------------------+---------------+
答案 0 :(得分:0)
您可以通过以下步骤获得所需的输出:
string_split
与cross apply
一起使用以隔离每个项目left
与CHARINDEX
一起获取每个项目的第一部分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
输出: