2012-08-27 1 views
1

이름과 눈 색이라는 두 개의 열이있는 테이블이 있다고 가정 해 봅시다. 이 표에서SQL 쿼리 - 존재하지 않으면 다른 하나를 선택하십시오. 둘 다 절대 사용하지 마십시오

당신은 잠재적으로 수 : 나는 녹색 눈을 가진 이름에 대한 모든 행을 선택하기 위해 노력하고있어

Name - Green Eyes 
Name - Brown Eyes 

을,하지만 난 다음, 녹색 눈이없는 이름이있는 경우 갈색 눈으로 이름을 선택하고 싶습니다. 주어진 이름에 대해 두 개의 행을 반환하고 싶지 않습니다. 이 작업을 수행하는 방법에 대한 의견이 있으십니까? 어떤 도움이라도 대단히 감사하겠습니다!

+1

실제 열 이름과 값은 무엇입니까? – jnylen

+0

http://stackoverflow.com/questions/12051863/is-it-possible-to-use-if-else-in-sql이 (가) 관심을 가질만한 것으로 보입니까? – LSerni

+0

실제 열 이름은 EXTERNAL_ENTITY 및 RATING_SOURCE_NAME입니다. 그것은 훨씬 더 큰 쿼리의 일부입니다. rating_source_name의 가능성은 'S & P'및 'Moody 's'입니다. 일부 주체는 S & P 및 Moody 's에 대한 평가가 있으며, 그러한 경우 S & P 행만보고 싶습니다. 그러나 기업이 S & P 등급이없고 Moodys 만있는 경우 Moodys의 등급을보고 싶습니다. – user1623682

답변

0

내가

select * 
from person 
where person.eyecolor = 'green' 
    or ( person.eyecolor = 'brown' 
     and not exists(select null from person where person.eyecolor = 'green') 
    ) 
+0

답장을 보내 주셔서 감사합니다. 그러나 이것은 제 상황에는 도움이되지 않습니다. – user1623682

+0

@ user1623682이 결과가 원하는 결과와 어떻게 다른지 설명 할 수 있습니까? 나는 당신이 문제를 묘사 할 때 이것이 정확하게 해결책이라고 믿기 때문에 궁금합니다. 그래서 당신의 문제를 오해하거나, 내 논리에 맞지 않습니다. 그리고 두 경우 모두 알고 싶습니다! : D – corsiKa

+0

당신 말이 맞아요, 당신의 영혼은 내가 설명한 것에 대해 효과가 있습니다. 그리고 저는 그것을 광산에서 쫓아내어 시험해 보았습니다. 나는 그것이 왜 내 큰 쿼리에서 작동하지 않았는지 정확히 모르겠다. 마침내 where 절에 case 문을 추가하여 필요한 것을 얻을 수있었습니다. "그리고 asv.rating_source_id = (asv.rating_source_id in (1) , 3) then 1 else 3 end) "도움을 많이 주셔서 감사합니다. 다음 번에 내가 필요한 것을 자세하게 기술 할 것입니다. – user1623682

2
SELECT COALESCE(g.name, b.name) name, 
    COALESCE(g.eye_color, b.eye_color) eye_color 

FROM (
    SELECT DISTINCT name, eye_color 
    FROM eye_colors 
    WHERE eye_color = 'green' 
) g 

FULL OUTER JOIN (
    SELECT DISTINCT name, eye_color 
    FROM eye_colors 
    WHERE eye_color = 'brown' 
) b 
ON b.name = g.name 
+0

답변을 주셔서 감사합니다. 더 큰 쿼리와 병합하는 방법을 찾았을 때 알려 드리겠습니다. – user1623682

0
IF EXISTS(SELECT * FROM Table WHERE Color='Green') 
    SELECT * FROM Table WHERE Color = 'Green' 
ELSE 
    SELECT * FROM Table WHERE Color='Brown' 
0

난 후, 테이블의 (이름, 색상)에 인덱스를 가지고 자체에 참여하지만, 먼저 차 "그린"을 걸릴 것이라고 할 것입니다, 다음 갈색

select 
     justName.Name, 
     coalesce(Green.Eye_Color, Brown.Eye_Color) as Eye_Color 
    from 
     (select distinct name 
      from eye_colors) justName 
     left join eye_colors as Green 
      on justName.Name = Green.Name 
      and Green.Eye_Color = 'Green' 
     left join eye_colors as Brown 
      on justName.Name = Brown.Name 
      and Brown.Eye_Color = 'Brown' 

단지에 의해 다음, 고유 한 이름을 가져옵니다 사전 질의를 찾아 두 번째 브라운, 녹색에 대해 한 번, 두 번 테이블 왼쪽 가입 할 수 있습니다. 녹색 레코드가 일치하지 않으면 갈색 인스턴스가됩니다.

관련 문제