2012-12-14 6 views
25

I wie Probe mit gespeicherten Daten eine Tabelle unterKonvertieren Comma Separated Spalte Wert auf Zeilen

Id | String 
-------------- 
1  abc,def,ghi 
2  jkl,mno,pqr 

Ich brauche die Ausgabe wie ..

Id | processedrows 
-------------- 
1  abc 
1  def 
1  ghi 
2  jkl 
2  mno 
2  pqr 

Wie kann ich das gleiche tun mit eine Auswahlabfrage in SQL Server?

+10

*** SQL *** ist nur die * Structured Query Language * - eine Sprache, die von vielen Datenbanksystemen, aber nicht aa Datenbank Produkt ... gibt viele Dinge, herstellerspezifisch - so dass wir muss wirklich wissen, was ** Datenbank-System ** (und welche Version) Sie verwenden .... –

+0

Erzähl mir mehr über Ihr Problem! Was ist dein Tisch? Oder es ist Schema –

+4

Zunächst einmal verwenden Sie ein schlechtes Datenmodell. Komma-getrennte Zeichenfolgen sollten eigentlich nie in Datenbanken sein. Zeitraum. –

Antwort

45

versuchen diese

SELECT A.[id], 
    Split.a.value('.', 'VARCHAR(100)') AS String 
FROM (SELECT [id], 
     CAST ('<M>' + REPLACE([string], ',', '</M><M>') + '</M>' AS XML) AS String 
    FROM TableA) AS A CROSS APPLY String.nodes ('/M') AS Split(a); 

hier finden

http://www.sqljason.com/2010/05/converting-single-comma-separated-row.html

+0

danke .. das sollte helfen .. genau das, was ich gesucht habe! – mhn

+1

Danke! Es hat mir geholfen! – Gidil

+0

Ehrfürchtig. Gespeichert viel Zeit! – Shahdat

0

Lassen Sie uns das unten stehende Skript versuchen: -

declare @str varchar(max) 

SELECT @str = isnull(@str +',', '') + a.Value 
FROM (SELECT Value Entityvalue from Table) a 

select @str 
0

mit bereits. Sie erhalten Ihre Ausgabe.

SELECT id, 
PARSENAME(REPLACE(Split.a.value('.', 'VARCHAR(100)'),'-','.'),1) 'Values' 
FROM 
(
    SELECT algorithms, 
    CAST ('<M>' + REPLACE(string, ',', '</M><M>') + '</M>' AS XML) AS Data 
    FROM <TableName> 
) AS A 
CROSS APPLY Data.nodes ('/M') AS Split(a) 
0
SELECT EmployeeID, 
LTRIM(RTRIM(m.n.value('.[1]','varchar(8000)'))) AS Certs 
FROM 
(
SELECT EmployeeID,CAST('<XMLRoot><RowData>' + REPLACE(Certs,',','</RowData><RowData>') + '</RowData></XMLRoot>' AS XML) AS x 
FROM @t 
)t 
CROSS APPLY x.nodes('/XMLRoot/RowData')m(n) 
+0

I bin mir nicht sicher, ob das die Frage beantwortet, aber es scheint nicht; Die Frage hat kein Feld mit dem Namen "EmployeeID", und das Umdrehen der String-Werte in XML scheint für mich ein riesiger Overkill zu sein ... – DaveyDaveDave

+0

Während dieses Code-Snippet willkommen ist und vielleicht etwas Hilfe bietet, wäre es [stark verbessert, wenn es enthielt eine Erklärung] (// meta.stackexchange.com/q/114762) von * wie * es die Frage anspricht. Ohne dies hat Ihre Antwort viel weniger pädagogischen Wert - denken Sie daran, dass Sie die Frage für Leser in der Zukunft beantworten, nicht nur die Person, die jetzt fragt! Bitte [bearbeiten] Sie Ihre Antwort, um eine Erläuterung hinzuzufügen und geben Sie an, welche Einschränkungen und Annahmen gelten. –