2012-08-27 62 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'。有些實體對標準普爾和穆迪都有評級,如果是這樣的話,我只想看看標準普爾的行情。但是,如果實體沒有標準普爾評級,只有穆迪,那麼我想看看穆迪的評級。 – 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 case ,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' 

預查詢剛剛獲得不同的名稱,然後通過左連接表兩次,一次爲綠色,第二個由褐色。如果綠色記錄沒有匹配,則獲取棕色實例。

相關問題