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을 나눌 수 있지만 두 개의 types.i는 나눌 수 없다. 2를 나누는 쿼리를 작성하면 그 값과 viceversa보다 더 많은 것을 나눌 수 없다. – Abhishek

관련 문제