2016-09-26 36 views
0

我有一个表中有一个内容字段填充该页上项目的ID。就像这样:如何创建一个临时表超出列内容

ID    | Contents 
Section-page-id | item-1 item-2 item-3 item-4 item-5 
Section-page-id2 | item-6 item-7 item-8 item-9 item-10 

我想创建一个临时表,看起来像下面这样:

Section-id  |ID 
item-1   |Section-page-id 
item-2   |Section-page-id 
item-3   |Section-page-id 
item-4   |Section-page-id 
item-5   |Section-page-id 
item-6   |Section-page-id2 
item-7   |Section-page-id2 
item-8   |Section-page-id2 
item-9   |Section-page-id2 
item-10   |Section-page-id2 

这甚至可能吗?在此先感谢您的时间。

+1

这是一个糟糕的设计。当你将多个值填入单个列时,它违反了1NF,并且非常痛苦。你需要一个字符串分解器来解析这个可用的东西。 http://sqlperformance.com/2012/07/t-sql-queries/split-strings –

+1

关于如何将分隔的字符串拆分为行的主题有很多有据可查的答案。在这个网站和其他人。递归公用表表达式方法,表值函数,XML。你在搜索什么,你有什么尝试? – Matt

回答

0

Turning a Comma Separated string into individual rows

Declare @YourTable table 
(
ID varchar(50), 
Contents varchar(max) 
) 
Insert Into @YourTable values 
('Section-page-id','item-1 item-2 item-3 item-4 item-5'), 
('Section-page-id2','item-6 item-7 item-8 item-9 item-10') 


;WITH CTE (ID, SectionId, Contents) as (

select ID, LEFT(Contents, CHARINDEX(' ',Contents+' ')-1), 
    STUFF(Contents, 1, CHARINDEX(' ',Contents+' '), '') 
from @YourTable 
union all 
select ID, LEFT(Contents, CHARINDEX(' ',Contents+' ')-1), 
    STUFF(Contents, 1, CHARINDEX(' ',Contents+' '), '') 
from CTE 
where Contents > '' 
) 
select SectionId, ID 
from CTE 
order by ID 
+0

非常感谢。这完美地工作,并将是主要的好处。 – Southerncentralrain