2017-12-04 2 views
0

authors라는 기본 키와 books라는 필드가있는 데이터 집합이 있습니다.Microsoft Access SQL 쉼표로 구분 된 값

표는이 같은 같습니다

Authors (primary key)  Books 
John      Fathom,Mouseover,Keycard 
Kyle      Teachers,Carl,Phone 

나는이 1NF을 위반 한 알을, 나는 차 키를 새 테이블 (많은 관계를) 만들려고 해요 (저자) 이상 발생 각 책마다 한 번. 즉

Authors     Books 
John      Fathom 
John      Mouseover 
John      Keycard 
Kyle      Teachers 
Kyle      Carl 
Kyle      Phone 

나는 Access에서 SQL을 사용해야하고, 나는 그것이 분할 기능을 포함한다 생각하지만, 나는이 쿼리를 수행하는 방법에 대한 손실에 있어요.

어떤 통찰력이라도 대단히 감사하겠습니다! 코드가 구현 오히려 어렵 기 때문에

, 당신에게

+0

몇 개의 레코드가 있습니까? –

+0

1000 이상, 수동으로 할 수있는 너무 많은 –

+0

[SQL 분할 열은 하나 이상의 가능한 구분 기호를 기반으로하고 새 테이블에 삽입 할 수 있습니다] (https://stackoverflow.com/questions/47014018/sql-split- 열 기반의 1 또는 더 많은 가능한 구분 기호 - 및 - 삽입 새 테이블) (내가 말했듯이, 당신은 VBA를 사용해야하거나 쉼표의 꽤 제한된 금액을 가지고 (2는 행할 수 있고, 더 많은 문제가 있습니다.) –

답변

0

잘 대단히 감사합니다, 당신은 단지 2가, 내가 구현 된 솔루션을 공유 할 수 있습니다 추측 : 당신의 TABLENAME와

이 (MyTable 교체를하고, 찾기 및 모든 필드 이름을 올바른 것으로 바꿉니다.) :

SELECT * Into NewTable FROM (
SELECT Author, IIf(InStr(1, [Books], ',') = -1, [Books], Left([Books], InStr(1, [Books], ',') - 1)) As Book 
FROM MyTable 
WHERE IIf(InStr(1, [Books], ',') = -1, [Books], Left([Books], InStr(1, [Books], ',') - 1)) <> "" 
UNION ALL 
SELECT Author, IIf(InStr(1,[Books],',')> 0, IIf(InStr(InStr(1,[Books],',') + Len(','), [Books] , ',') < 1, Mid([Books], InStr(1,[Books],',') + Len(',')), Mid([Books], InStr(1,[Books],',') + Len(','), InStr(InStr(1,[Books],',') + Len(','), [Books] , ',') - InStr(1,[Books],',') - Len(','))), "") As Book 
FROM MyTable 
WHERE IIf(InStr(1,[Books],',')> 0, IIf(InStr(InStr(1,[Books],',') + Len(','), [Books] , ',') < 1, Mid([Books], InStr(1,[Books],',') + Len(',')), Mid([Books], InStr(1,[Books],',') + Len(','), InStr(InStr(1,[Books],',') + Len(','), [Books] , ',') - InStr(1,[Books],',') - Len(','))), "") <> "" 
UNION ALL 
SELECT Author, IIf(InStr(InStr(1,[Books],',') + Len(','), [Books],',')> 0, IIf(InStr(InStr(InStr(1,[Books],',') + Len(','), [Books],',') + Len(','), [Books] , ',') < 1, Mid([Books], InStr(InStr(1,[Books],',') + Len(','), [Books],',') + Len(',')), Mid([Books], InStr(InStr(1,[Books],',') + Len(','), [Books],',') + Len(','), InStr(InStr(InStr(1,[Books],',') + Len(','), [Books],',') + Len(','), [Books] , ',') - InStr(InStr(1,[Books],',') + Len(','), [Books],',') - Len(','))), "") As Book 
FROM MyTable 
WHERE IIf(InStr(InStr(1,[Books],',') + Len(','), [Books],',')> 0, IIf(InStr(InStr(InStr(1,[Books],',') + Len(','), [Books],',') + Len(','), [Books] , ',') < 1, Mid([Books], InStr(InStr(1,[Books],',') + Len(','), [Books],',') + Len(',')), Mid([Books], InStr(InStr(1,[Books],',') + Len(','), [Books],',') + Len(','), InStr(InStr(InStr(1,[Books],',') + Len(','), [Books],',') + Len(','), [Books] , ',') - InStr(InStr(1,[Books],',') + Len(','), [Books],',') - Len(','))), "") <> "" 
)