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