2016-09-28 1 views
0

아래 작업에 대한 도움이 필요합니다. Table_A에 열 (ID, Name)이 있습니다. Table_B에 열 (ID, 범주)이 포함되어 있습니다.SQL case few rows analysis

두 가지 범주 (범주 _A, 범주 _B)가 있습니다.

나는 아래 형식으로 결과 테이블을 좀하고 싶습니다 :

|Name|Category_A|Category_B| 
---------------------------- 
|Lilu| NO | YES | 

그러나 Table_B 우리가 예를 들어, 의미 할 동일한 ID에 대한 두 개의 행을 포함 할 수 있습니다 "릴루"는 Catogory_A와 Category_B 모두에 속합니다.

select A.ID, --B.Category 
case when B.category = 'Category_A' then 'yes' else 'no' end Category_A, 
case when B.category = 'Category_B' then 'yes' else 'no' end Category_B 
from system.A_table A, B_table B; 

어떻게 그것을 구현할 수 ...

|Name|Category_A|Category_B| 
---------------------------- 
|Lilu| YES | YES | 

내가 몇 가지 질의를 준비,하지만 난 그룹화 그리워 :하지만 결과에 나는 하나의 항목이 필요하십니까?

+1

당신은 귀하의 질문에 표 A가 필요하지 않습니다 시도 사용해보십시오. 표 B는 필요한 유일한 것입니다. 출력 1과 'yes'/ 'no'대신 0. max (Category_A), max (Category_B) –

답변

0

select A.name, 
case when exist (Select b.Id from B_table b where b.id=A.id and b.category = 'Category_A') then 'yes' else 'no' end Category_A, 
case when exist (Select b.Id from B_table b where b.id=A.id and b.category = 'Category_B') then 'yes' else 'no' end Category_B 
from system.A_table A 
+0

으로 결과를 그룹화합니다.하지만 테이블이 클 경우 엔 엔진에서 매우 무겁습니다. –

+0

그게 다야! 고맙습니다! 그렇게 쉬운 ... –

+0

당신은 환영합니다 !!!! – Christian

0

이 하나

SELECT T.Name, 
CASE WHEN MAX(T.Category_A)='' THEN 'no' ELSE MAX(T.Category_A) END as Category_A, 
CASE WHEN MAX(T.Category_B)='' THEN 'no' ELSE MAX(T.Category_B) END as Category_B 
( 
select A.Name as Name, --B.Category 
case when B.category = 'Category_A' then 'yes' else '' end Category_A, 
case when B.category = 'Category_B' then 'yes' else '' end Category_B 
from A_table A, B_table B WHERE A.ID=B.ID) 
T 
GROUP BY T.Name