고수님들.
아래 쿼리를 어떻게 작성해야하는지 좀 알려주세요
아래와 같이 모델명/제조자로 구성됨 TableA 가 있습니다
테이블명 : TableA | |
모델명 | 제조자 |
1 | A |
1 | B |
2 | A |
2 | B |
3 | B |
그리고, 아래와 같이 동일한 스키마를 가진
TableB 가 있습니다
테이블명 : TableB | |
모델명 | 제조자 |
1 | A |
2 | A |
3 | A |
4 | A |
그런데, TableB 에 대해
결과값을 아래와 같이 리턴하고 싶습니다
모델명 | 제조자 | 체크결과 |
1 | A | 정상 |
2 | A | 정상 |
4 | A | 정상 |
3 | A | 이상 |
즉, TableB 에 있는 모델명이 만약 TableA 에 존재하면
반드시 TableA 에 있는 제조자들 중에 하나여야합니다.
그래서, 모델명 1,2는 TableA 에 제조자 A,B 에 포함되기 때문에
체크결과는 정상이고
모델명 4는 아예 TableA 에 존재하지 않아서 이것 또한
체크결과는 정상입니다
하지만 모델명 3는 TableA 에 제조사가 B 만 존재하기 때문에
이것의 체크결과는 이상입니다
이 쿼리를 어떻게 작성해야하는지
고수님들의 답변을 애타게 기다립니다.
Comment 3
-
건우아빠
2017.01.08 14:44
-
인생은 열심히
2017.01.08 18:22
답변 감사드립니다.
그런데 결과값이 제대로 나오지 않습니다
이렇게 하면 모델명 4도 이상으로 나옵니다
create table dbo.TableA (model varchar(10), maker varchar(10))
insert into TableA values ('1','A')
insert into TableA values ('1','B')
insert into TableA values ('2','A')
insert into TableA values ('2','B')
insert into TableA values ('3','B')create table dbo.TableB (model varchar(10), maker varchar(10))
insert into TableB values ('1','A')
insert into TableB values ('2','A')
insert into TableB values ('3','A')
insert into TableB values ('4','A')(쿼리)
select b.*, case when b.maker is null then '이상' else '정상' end as 'Chek결과'
from TableB a left join TableA b on a.model = b.model and a.maker =b.maker(결과값)
model maker check결과 1 A 정상 2 A 정상 NULL NULL 이상 NULL NULL 이상 -
건우아빠
2017.01.09 18:14
그 부분이 빠졌네요..
select *
, case when c.macnt > 0 then '정상'
else
case when b.mocnt = 0 then '정상' else '이상' end
end
from TableB a
outer apply
( select COUNT(*) mocnt
from TableA
where model = a.model ) b
outer apply
( select COUNT(*) macnt
from TableA
where maker = a.maker
and model = a.model ) c
select a.*
, case when b.제조자 is null then '이상' else '정상' end
from TableB a left join TableA b on a.모델명 = b.모델명 and a.제조자 =b.제조자