2014-03-26 66 views
0

SQL中是否有方法檢查字段是否與另一個字段關聯,並在select語句中返回某個值。這裏是我的意思是:如何檢查與另一個字段關聯的字段並在匹配時返回一個值

如果我有一個像

Id  Language 
----------------- 
1  Spanish 
2  English 
1  English 
3  English 
4  English 
2  Spanish 
2  English 

表我怎樣才能返回類似

Id   SpanishAssociated 
------------------------------ 
1   Yes 
2   Yes 
3   No 
4   No 

我運行到現在的問題是,如果我這樣做

SELECT Id, SpanishAssocated = (CASE SpanishAssociated WHEN 'Spanish' THEN 'Yes' 
ELSE 'NO' END) 
FROM MyTable 

我得到一個表,看起來像

Id   SpanishAssociated 
------------------------------ 
1   Yes 
1   No 
2   Yes 
2   No 
2   No 
3   No 
4   No 

實際的查詢要複雜得多,但這是一般的想法。基本上我只想要一個有「是」的列,如果「西班牙語」與用戶ID相關聯(表中不唯一)(即表中至少有一行是我從「用戶」 。ID

回答

0

嘗試,如果你是這樣的:

SELECT Id, SpanishAssocated = MAX(CASE SpanishAssociated WHEN 'Spanish' THEN 'Yes' 
ELSE 'NO' END) 
FROM MyTable 
GROUP BY Id; 

注意 - 它依賴於字符串比較(「是」比「否」時),可能不支持某些排序規則

+0

它仍然返回重複的行。我認爲這可能是我想要進入的大方向。必須有一種方法可以使用聚合函數來解決這個問題。 – Adam

+0

此版本的查詢只能爲每個不同的ID返回一個「SpanishAssocated」標誌。既然你提到真正的查詢是更復雜的,我想有一些連接添加記錄到結果集。但我相信一個或其他聚合函數會給你想要的輸出... – a1ex07

0

有人工作建議我使用子查詢並將其加入到我的主要查詢中,它運行良好。

我結束了這樣的事情

SELECT OtherTables.Id, Language = (CASE WHEN X.Id IS NOT NULL THEN 'Yes' ELSE 'No' END) 
--Select a bunch of other stuff from the other tables here 
FROM OtherTables 
--A bunch of other table joins go here 
LEFT JOIN (SELECT DISTINCT Id FROM MyTable WHERE Language = 'Spanish') X 
ON X.Id = MyTable.Id 
GROUP BY OtherTables.Id, X.Id -- and other stuff I selected 
相關問題