我编写了一个查询,它返回一个包含数据行的表(tb1)。一列显示分析师可以处理的队列列表,其他列显示有多少分析师可以在这些队列上工作以及有多少分析人员可以使用。
我现在需要将此查询包装在另一个中,以便返回行,分解为多行,每行显示每个队列有多少分析人员可用/离开。
更新 - 当我有类似的帖子时,我创建了这个帖子,因为Queue列是键,需要将它们分成单独的行,每个行都有来自其他(可用/离开)列的相同数据只有一排。为了增加复杂性,可能会有一些行/更多/更少的队列名称需要分组。示例已更新。
答案 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