2016-09-26 6 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 

を?あなたの時間を事前に感謝します。 Turning a Comma Separated string into individual rowsから

+1

これは貧しいデザインです。このように複数の値を1つの列にまとめると、1NFに違反し、作業に深刻な苦痛を与えます。これを解析して何かに利用できるようにするには、文字列スプリッタが必要です。 http://sqlperformance.com/2012/07/t-sql-queries/split-strings –

+1

区切られた文字列を行に分割する方法については、多くの文書化された回答があります。このサイトなどで再帰共通テーブル式、テーブル値関数、XMLあなたは何を探し、何を試しましたか? – Matt

答えて

0

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

関連する問題