2012-09-17 4 views
1

SQL 또는 ms 액세스 형식으로이 테이블이 있습니다.SQL 또는 ms 액세스에 가입 하시겠습니까?

샘플

나는 A와 같은 ID2를 가지고 이름 필드의 값과 클래스 = "주"와 예 필드 (A)에 "~"교체 할 필요가
ID ID2 name class example 
1 10 John main  
2 10   
3 10   
4 10     ~ is look at me. 
5 20 Candice main  
6 20   
7 20     ~ is in Japan. 
8 20     ~ is reading a book. 
9 20   

. 조인 구문은 어떻게 작성합니까?

결과

ID ID2 name class example 
1 10 John main  
2 10   
3 10   
4 10     John is look at me. 
5 20 Candice main  
6 20   
7 20     Candice is in Japan. 
8 20     Candice is reading a book. 
9 20   
+1

... 그때 가서이 질문에 대답하지 않는 유효한 입력해도 정상화 – podiluska

답변

0

나는 테이블 구성이 올바르지 않습니다 생각합니다.

테이블에서 반복되는 valor를 사용하는 ID 필드를 사용한다는 사실은 다소 나쁜 데이터베이스 디자인을 가리 킵니다.

두 테이블간에 데이터를 분할하는 것이 더 좋은 결과를 얻을 것이라고 생각합니다. 하나는 예제와 "main"클래스가 있습니다. 그런 다음 ID2 필드를 사용하여 간단한 조인을 통해 두 테이블을 조인 할 수 있습니다. 데이터가 (어떤 이유), 귀하의 질문에 대답하기 위해 몹시 구성되어 있지만

+0

에 대해 읽어 .... 영업 이익이있을 것입니다 : JOIN을 사용하는 요구 사항없이

는 대안이있다 질문 :이 테이블은 3NF 또는 그 이상입니까? – rene

0
select m.[name] & replace(b.example, "~", "") as combined 
from sample as m 
inner join sample as b on m.id2 = b.id2 
where m.[class] = "main" 
and b.example not null 
0

, 당신은 이런 식으로 작업을 수행 할 수 있습니다

이 가정에 의존
SELECT 
    T1.[ID], 
    T1.[ID2], 
    T1.[name], 
    T1.[class], 
    iif(not isnull(T1.[Example]) and not isnull(T2.[Name]), Replace(T1.[Example], "~", T2.[Name]), null) As [Example] 
FROM 
    Data T1 
LEFT JOIN Data T2 ON (T1.[ID2] = T2.[ID2] AND T2.[Class]="main") 

는 하나만 기록이 있음 ID2의 각 고유 값에 대해 class = main (그렇지 않으면 행 반복이 발생합니다).

SELECT 
    [ID], 
    [ID2], 
    [name], 
    [class], 
    (iif(not isnull([example]), Replace([example], "~", nz((select top 1 [name] from Data T2 where T2.ID2 = T1.ID2 and T2.[class]="main" order by T2.[ID2]),"")),null)) as [ExampleNew] 
FROM Data T1