You można to zrobić z czystym SQL jak ten
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(t.values, ',', n.n), ',', -1) value
FROM table1 t CROSS JOIN
(
SELECT a.N + b.N * 10 + 1 n
FROM
(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a
,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b
ORDER BY n
) n
WHERE n.n <= 1 + (LENGTH(t.values) - LENGTH(REPLACE(t.values, ',', '')))
ORDER BY value
Uwaga: Sztuką jest wykorzystanie sygnalizacyjną (numery) stolik i bardzo przydatny w tym przypadku funkcja MySQL SUBSTRING_INDEX()
. Jeśli wykonujesz wiele takich zapytań (dzielenie), możesz rozważyć wypełnienie i użycie tabeli utrzymywanych tabel, zamiast generowania jej w locie z podzapytaniem podobnym do tego w tym przykładzie. Podzapytanie w tym przykładzie generuje sekwencję liczb od 1 do 100, umożliwiając efektywne rozdzielenie do 100 oddzielnych wartości w wierszu tabeli źródłowej. Jeśli potrzebujesz więcej lub mniej, możesz łatwo to zmienić.
wyjściowa:
| VALUE |
|----------------|
| somethingA |
| somethingB |
| somethingC |
| somethingElseA |
| somethingElseB |
Oto SQLFiddle demo
ten sposób kwerenda może wyglądać z utrwalonej tabeli tally
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(t.values, ',', n.n), ',', -1) value
FROM table1 t CROSS JOIN tally n
WHERE n.n <= 1 + (LENGTH(t.values) - LENGTH(REPLACE(t.values, ',', '')))
ORDER BY value
Oto SQLFiddle demo
zapytał gazillion razy na SO: eghttp: //stackoverflow.com/questions/10581772/sql-server-2008-how-to-split-a-comma-separated-value-to-columns , http://stackoverflow.com/questions/13873701/convert-comma-separated-column-value-to-rows –
@MitchWheat - to nie jest odpowiedź na to pytanie. Mają ustawioną liczbę wartości oddzielonych przecinkami, ja nie. –
Szukasz rozwiązania czystego SQL lub rozwiązania w innym języku - na przykład PHP. –