2017-01-04 13 views
-1

을 정상화하는 방법은 열 이름 푸 푸 고유 ID이며, 바로 구분 다중 값을 포함 & 바 ~단일 필드에 다중 값을 (SQL)

Foo Bar 
1 A~B~ 
2 A~C~D 
구성된 테이블이 내가 필요

같은 정규화한다 : 나는 피벗 다음 항목에 텍스트를 분리하여 엑셀에서 그것을 할 수 있지만 내가 기록을 통해 1 백만을 가지고 바 열까지 포함 할 수 있으므로,이 행할 수없는

Foo Bar 
1 A 
1 B 
2 A 
2 C 
2 D 

~ 12 가지 값.

SQL에서 직접 조작 할 수있는 간단한 방법이 있습니까?

+2

당신이 을 사용하고있는 RDBMS? 예를 들어, mySql에 대한 응답은 SQL 서버에 대한 응답과 다를 수 있습니다. 관련 데이터베이스와 관련 버전을 포함하도록 질문을 편집하십시오. –

+0

죄송합니다. T-SQL을 사용하고 있습니다. – Jim

답변

0

감사합니다. 아래의 스크립트는 XML이나 로직을 이해하지 못한다고해도 이상하게 작동합니다.

SELECT A.FOO,
Split.a.value ('.', 'VARCHAR (100)')
(SELECT FOO 데이터
,
CAST ('+ AS REPLACE (BAR , ',', '') +) 'AS XML) AS 데이터
FROM 표 1 ) 크로스로 적용 Data.nodes ('/ M ') AS 분할 (a);

참조 : Turning a Comma Separated string into individual rows

1

여기에는 1 대 다수의 관계가 있습니다. 그래서 많은 바에 1 개의 Foo가 있습니다. 따라서 데이터를 2 차 정규 양식 (2NF)으로 준수해야합니다. 여기

는 그래서 당신과 같은 행으로 문자열 열 값을 분리하는 가장 좋은 방법을 설명 게시하고자한다 : Turning a Comma Separated string into individual rows

1

당신은 당신의 DBMS를 지정하지 않은 그래서이 포스트 그레스를위한 것입니다

select t.foo, b.bar 
from the_table t, 
    unnest(string_to_array(t.bar, '~')) as b(bar);