这里是另一种选择
Declare @YourTable table (duration int,[business duration] int,[impacted service] varchar(50))
Insert Into @YourTable values
(60 ,40,'crm'),
(100,95,'payroll'),
(70 ,70,'scheduling'),
(50 ,45,'crm,payroll, scheduling')
Select Distinct
A.duration
,A.[business duration]
,[impacted service] = B.Key_Value
From @YourTable A
Cross Apply (Select * from [dbo].[udf-Str-Parse](A.[impacted service],',')) B
返回
duration business duration impacted service
50 45 crm
50 45 payroll
50 45 scheduling
60 40 crm
70 70 scheduling
100 95 payroll
解析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',' ')
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 ltrim(rtrim(String.value('.', 'varchar(max)'))) FROM @XML.nodes('x') as T(String)
Return
End
解决这个问题的最佳方法是停止在单个单元中填充多个值。这违反了1NF并引起无数的痛苦。要拆分这些数据需要某种类型的字符串拆分器。这里有几个很好的例子。 http://sqlperformance.com/2012/07/t-sql-queries/split-strings –