SQL Server 2014 - 如何将带逗号的字符串拆分成多行?

时间:2016-08-05 16:23:05

标签: sql sql-server-2014

我编写了一个查询,它返回一个包含数据行的表(tb1)。一列显示分析师可以处理的队列列表,其他列显示有多少分析师可以在这些队列上工作以及有多少分析人员可以使用。

我现在需要将此查询包装在另一个中,以便返回行,分解为多行,每行显示每个队列有多少分析人员可用/离开。

table 1

更新 - 当我有类似的帖子时,我创建了这个帖子,因为Queue列是键,需要将它们分成单独的行,每个行都有来自其他(可用/离开)列的相同数据只有一排。为了增加复杂性,可能会有一些行/更多/更少的队列名称需要分组。示例已更新。

1 个答案:

答案 0 :(得分:2)

这是我的udf。那里有很多变化。我喜欢这个是你获得序列号

  

修改

抱歉,我没看到你的照片。但是在Cross Apply的帮助下

Declare @YourTable table (id int,SomeField varchar(50))
Insert into @YourTable values
(1,'Smith,John'),
(2,'Doe,Jane')

Select A.ID
      ,YourNewFieldName=B.Key_Value
  From @YourTable A
  Cross Apply (Select * from [dbo].[udf-Str-Parse](A.SomeField,',')) B

返回

ID  YourNewFieldName
1   Smith
1   John
2   Doe
2   Jane

UDF

CREATE FUNCTION [dbo].[udf-Str-Parse] (@String varchar(max),@Delimeter varchar(10))
--Usage: Select * from [dbo].[udf-Str-Parse]('Dog,Cat,House,Car',',')
--       Select * from [dbo].[udf-Str-Parse]('John Cappelletti was here',' ')
--       Select * from [dbo].[udf-Str-Parse]('id26,id46|id658,id967','|')
--       Select * from [dbo].[udf-Str-Parse]('hello world. It. is. . raining.today','.')

Returns @ReturnTable Table (Key_PS int IDENTITY(1,1), Key_Value varchar(max))
As
Begin
   Declare @XML xml;Set @XML = Cast('<x>' + Replace(@String,@Delimeter,'</x><x>')+'</x>' as XML)
   Insert Into @ReturnTable Select Key_Value = ltrim(rtrim(String.value('.', 'varchar(max)'))) FROM @XML.nodes('x') as T(String)
   Return 
End

样品返回

Key_PS  Key_Value
1       Dog
2       Cat
3       House
4       Car