2013-01-04 50 views
0

我有一个包含一个表:SQL - 解析字符串

ID  Names 
1  Aaron, Betsy, Cindy 
2  Dillon, Eric, Fred 

我想通过名称列解析并使其返回:

ID Names 
1 Aaraon 
1 Betsy 
1 Cindy 
2 Dillon 

我已经发现了几个功能,网上说解析名称列,但不会将ID绑定回它。

+0

有没有你不已经有一个一到许多特殊的原因关系建模?或者,这个查询是你计划迁移到适当的一对多关系的一部分吗? – cdhowie

+3

你正在使用什么rdbms? MySQL的?甲骨文? sql server?... –

+0

您使用的是什么RDBMS? – Taryn

回答

2

怎么是这样的:

;with cte (id, name, names) as 
(
    select id, 
    cast(left(names, charindex(',',names+',')-1) as varchar(50)) name, 
     stuff(names, 1, charindex(',',names+','), '') names 
    from yourtable 
    union all 
    select id, 
    cast(left(names, charindex(',',names+',')-1) as varchar(50)) name, 
    stuff(names, 1, charindex(',',names+','), '') names 
    from cte 
    where names > '' 
) 
select id, name 
from cte 
order by id 

SQL Fiddle with Demo

返回结果:

| ID | NAME | 
--------------- 
| 1 | Aaron | 
| 1 | Betsy | 
| 1 | Cindy | 
| 2 | Dillon | 
| 2 | Eric | 
| 2 | Fred | 
+0

谢谢!完美作品 – user1411074

+0

@ user1411074乐于助人。如果此答案对您有帮助,请务必通过左侧的复选标记进行接受。它将帮助未来的访问者访问该网站,并获得接受的声誉。 – Taryn