2014-09-04 4 views
0

J'ai une table comme indiqué ci-requête Sql pour créer la ligne unique à plusieurs rangs

ID   Value 
-----  ---------- 
1   10,20,30 

J'ai besoin du résultat que

ID   Value 
---  ------- 
1   10 
1   20 
1   30 

Merci.

+2

Pourquoi vous avez stocké '10,20,30' du tout? N'est-il pas possible de le stocker déjà comme vous le voulez dans le résultat? Donc, vous devriez créer une nouvelle table avec une clé étrangère à la première table. Ce processus est appelé [normalisation] (http://en.wikipedia.org/wiki/Database_normalization). –

+0

Je sais que vous pouvez penser que vous gagnez de la place dans la façon dont vous les stockez, mais vous allez perdre du temps à les afficher. Je suis d'accord avec @Tim, avoir des lignes séparées. Même avoir une autre table pour One-Many ou Many-Many relation. C'est pourquoi nous avons des DB relationnelles. –

+0

Est-il possible d'obtenir le résultat en utilisant sql query? – Merin

Répondre

0

Cela fonctionne

;with tmp(Id, value, Data) as (
select Id, LEFT(value, CHARINDEX(',',value+',')-1), 
    STUFF(value, 1, CHARINDEX(',',value+','), '') 
from @Testdata 
union all 
select Id, LEFT(Data, CHARINDEX(',',Data+',')-1), 
    STUFF(Data, 1, CHARINDEX(',',Data+','), '') 
from tmp 
where Data > '' 
) 
select Id, value 
from tmp 
order by Id 

possible dupliquer Turning a Comma Separated string into individual rows

0

S'il vous plaît les opérations suivantes:

SELECT A.ID, 
     Split.a.value('.', 'VARCHAR(100)') AS Value 
    FROM (SELECT ID, 
       CAST ('<V>' + REPLACE(Value, ',', '</V><V>') + '</V>' AS XML) AS Value 
     FROM YourTable 
     ) AS A 
     CROSS APPLY Value.nodes ('/V') AS Split(a); 
Questions connexes