2012-12-14 19 views
25

Mam tabeli próbkę z danymi przechowywanymi jak poniżejKonwersja wartości oddzielonych przecinkami kolumn do wierszy

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

muszę wyjście jak ..

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

Jak mogę zrobić to samo z zapytanie wybrane w SQL Server?

+10

*** *** SQL jest po prostu * * Structured Query Language - język używany przez wielu systemów baz danych, ale nie aa produkt bazy danych ... wiele rzeczy jest specyficzny dla dostawcy - więc naprawdę musisz wiedzieć, jaki ** system baz danych ** (i której wersji) używasz ... –

+0

powiedz mi więcej o swoim problemie! jaki jest twój stół? lub jego schemat –

+4

Po pierwsze, używasz złego modelu danych. Rozdzielane przecinkami ciągi powinny na ogół nigdy nie być w bazach danych. Kropka. –

Odpowiedz

45

spróbować

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); 

patrz tutaj

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

+0

dzięki .. powinno to pomóc .. dokładnie to, czego szukałem! – mhn

+1

Dzięki! Pomogło mi! – Gidil

+0

Awesome. Zaoszczędziłeś dużo czasu! – Shahdat

0

Spróbujmy poniższy skrypt: -

declare @str varchar(max) 

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

select @str 
0

Spróbuj z tym. Otrzymasz swoje wyniki.

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 nie jestem pewien, czy to odpowiada na pytanie, ale nie wydaje się; pytanie nie ma pola o nazwie "EmployeeID", a przekształcenie wartości ciągu w XML wydaje się być ogromnym przesadą dla mnie ... – DaveyDaveDave

+0

Chociaż ten fragment kodu jest mile widziany i może zapewnić pewną pomoc, byłby [znacznie poprawiony, gdyby: zawiera wyjaśnienie] (// meta.stackexchange.com/q/114762) * jak * adresuje to pytanie. Bez tego Twoja odpowiedź ma znacznie mniejszą wartość edukacyjną - pamiętaj, że odpowiadasz na pytanie dla czytelników w przyszłości, a nie tylko pytasz teraz! Proszę [edytuj] swoją odpowiedź, aby dodać wyjaśnienie i podać, jakie ograniczenia i założenia mają zastosowanie. –

Powiązane problemy