2012-02-27 3 views
0

質問表にcategoryidという名前のフィールドがあります。このフィールドには、異なるカテゴリを表示するために複数の値を入力できます。 今、私は各値を分けて個別に取得したいと思います。sqlserverの単一の列の値を区切る

値は、例えば、文字

、で区切られ

categoryid varchar 
3 
3,8 
5,9,7 
8,5,7,3,2 

どのように私は、SQLクエリを使用してそれらのそれぞれを分離することができますか? 助けてください

+0

categoryid varcharまたはnvarcharタイプ? – ChrisBD

+0

@ChrisBD varchar – Abhishek

+1

おそらくあなたはあなたのデータを正規化する必要がありますか? http://en.wikipedia.org/wiki/Database_normalization –

答えて

1
declare @T table 
(
    category_id varchar(10) 
) 

insert into @T 
select '3' union all 
select '3,8' union all 
select '5,9,7' union all 
select '8,5,7,3,2' 

;with C(ID, category_id) as 
(
    select cast(left(category_id, charindex(',', category_id+',', 1)-1) as int), 
     stuff(category_id, 1, charindex(',', category_id+',', 1), '') 
    from @T 
    union all 
    select cast(left(category_id, charindex(',', category_id+',', 1)-1) as int), 
     stuff(category_id, 1, charindex(',', category_id+',', 1), '') 
    from C 
    where len(category_id) > 0 
) 
select ID 
from C 
+0

それはデータを分割していますが、その後すべてに参加した後.........私はクエリが上記のいずれかを分割できるようにしたいデータ – Abhishek

+0

@Abhishek Ok。どちらを分割したいですか? CTEの最初の部分にwhere句を追加することで解決する必要があります。 'SomeColumn = 'SomeValue'' –

+0

私は2を分割することができますか、3を分割することはできますが、2つのtypes.iを分割することはできません.2分割するクエリを書くと、それらの値とその逆数よりも分割することはありません。 – Abhishek

関連する問題