split une colonne en plusieurs

Affiche de la première fois ici, alors s'il vous plaît pardonner les contretime.

J'ai une requête en SQL qui, pour des raisons de simplicité, renvoie la durée, la durée de l'activité et le service impacté. Le problème réside dans le fait que si son service est impacté, il a parfois plus d'une valeur dans la ligne. Par exemple, il peut s'agir de 'crm, payrol et scheduling'. Voir ci-dessous.

durée durée des affaires impacté service 60 40 crm 100 95 paies 70 70 ordonnancement 50 45 crm, ordonnancement, ordonnancement

Ce que je veux, c'est une ligne individuelle pour chacune des valeurs à l'intérieur de celle-là. Ainsi:

duration business duration impacted service 60 40 crm 50 45 crm 100 95 payroll 50 45 payroll 70 70 scheduling 50 45 scheduling 

Comment vous y prendrez-vous?

Merci!

Une méthode utilise une fonction de division. Google "fonction de partage SQL Server" sur le web. Ensuite, vous aurez une fonction de partage.

Vous pouvez le faire avec outer apply :

 select t.duration, t.business_duration, s.impacted_service from t outer apply (dbo.split(t.impacted_service)) s(impacted_service); 

Voici une autre option

 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 

Résultats

 duration business duration impacted service 50 45 crm 50 45 payroll 50 45 scheduling 60 40 crm 70 70 scheduling 100 95 payroll 

Le file UDF d'parsing si nécessaire

 CREATE FUNCTION [dbo].[udf-Str-Parse] (@Ssortingng 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(@Ssortingng,@Delimeter,'</x><x>')+'</x>' as XML) Insert Into @ReturnTable Select lsortingm(rsortingm(Ssortingng.value('.', 'varchar(max)'))) FROM @XML.nodes('x') as T(Ssortingng) Return End