2016-08-05 37 views
1

Ich habe eine Abfrage geschrieben, die eine Tabelle (tb1) mit Datenzeilen zurückgibt. Eine Spalte zeigt eine Liste der Warteschlangen, mit denen ein Analyst arbeiten kann, und die anderen Spalten zeigen an, wie viele Analysten für diese Warteschlangen verfügbar sind und wie viele davon entfernt sind.SQL Server 2014 - Wie teilt man eine Zeichenfolge mit Kommata in mehrere Zeilen auf?

Ich muss nun diese Abfrage in eine andere umbrechen, so dass die Zeile zurückgegeben wird, aufgeteilt in mehrere Zeilen, die jeweils zeigen, wie viele Analysten pro Warteschlange verfügbar sind.

table 1

UPDATE - Ich habe diesen Beitrag erstellt, wenn es ähnliche da draußen, weil die Warteschlange Spalte ist der Schlüssel, die in einzelne Reihen jeweils mit den gleichen Daten von der anderen (vergeblich getrennt werden muss/weg) Spalten, wenn es nur eine Zeile war. Um Komplexität hinzuzufügen, können einige Zeilen mit mehr/weniger Warteschlangennamen gruppiert werden. Beispiel ist aktualisiert.

+0

Zeigen Sie uns die Abfrage Sie schrieb – kbball

+2

http://stackoverflow.com/questions/5493510/Durch Komma getrennte Zeichenfolge in einzelne Zeilen –

Antwort

2

Hier ist mein udf. Es gibt viele Variationen da draußen. Was ich über diese gefällt, ist Sie die Sequenznummer

EDIT erhalten:

Sorry, ich habe nicht gesehen, Ihr Bild. Aber mit Hilfe eines Kreuz Bewerben

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 

Returns

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 

Sample Return

Key_PS Key_Value 
1  Dog 
2  Cat 
3  House 
4  Car 
+0

Wird Ihre Funktion auschecken, aber mit den Warteschlangennamen als ID stecken bleiben. Ich habe meine Hauptpost aktualisiert, da sie anderen zu ähnlich war. – Talbius