2017-01-25 71 views
0

我有一個包含ID的表格,並回答它看起來像列:SQL查詢來比較有統計記錄大於1

| id | answer | 
| 1 | Yes | 
| 2 | No | 
| 3 | Unsure | 
| 1 | No | 
| 1 | Unsure | 
| 3 | Yes | 
| 2 | Unsure | 
| 4 | NULL | 
| 4 | Unsure | 
| 4 | No  | 

我想輸出的方式,如果用戶ID曾經回答「是「(例如id 1),那麼最終輸出應該有1. 但是,如果用戶標識已回答」否「和」NULL「,則輸出應爲」否「 此外,如果用戶標識回答」不確定「否「或」不確定「和」空「,則輸出應該是」不確定「

最終輸出:

| id | answer | 
| 1 | Yes | 
| 2 | Unsure | 
| 3 | Yes | 
| 4 | Unsure | 
+0

鑑於您需要分析用戶的答案集,我想我會將可能的答案轉換爲單獨的列,按用戶ID分組。然後,您可以輕鬆分析用戶擁有哪些答案,並確定哪個答案最合適。 –

回答

0

你想用聚集和case邏輯是:

select id, 
     (case when sum(case when Answer = 'yes' then 1 else 0 end) > 0 
      then 'yes' 
      when sum(case when answer = 'unsure' then 1 else 0 end) > 0 
      then 'unsure' 
      else 'no' -- or perhaps max(answer) 
     end) as answer 
from t 
group by id; 

如果只可能是「是」,「否」,「不確定」和NULL,那麼你可以採取一個捷徑:

select id, 
     (case when max(Answer) = 'yes' 
      then 'yes' 
      when max(answer) = 'unsure' 
      then 'unsure' 
      else 'no' -- or perhaps max(answer) 
     end) as answer 
from t 
group by id; 
+0

真的是一個有趣的答案。你能否在第二個選項中告訴我使用max()函數? – Sravee

+0

@sravee。 。 。 'max()'是'max()'。 。 。我不確定你的問題是什麼。 –

+0

對不起,我打算在這種情況下詢問max()是否計算答案字段或id字段? – Sravee

0
CASE WHEN (.Answer IS NULL OR .Answer = 'No') THEN 'NO' ELSE (.Answer) END AS 'FILTERED ANSWER' 

這可以幫助你嗎?