2010-12-13 91 views
1

我有調查答案的表,是這樣的:多選擇在一個SQL語句

date  | q1 | q2 | 
12/12/10 | yes | no | 
12/13/10 | no | no | 

,我想創建一個查詢,將讓我這個表的結果彙總,讓我設置相關的日期範圍。 我下面的語句非常作品:

SELECT (SELECT Count(*) 
     FROM `survey` 
     WHERE q1='Yes') AS q1_yes, 
     (SELECT Count(*) 
     FROM `survey` 
     WHERE q1='No') AS q1_no, 
     (SELECT Count(*) 
     FROM `survey` 
     WHERE q2='Yes') AS q2_yes) 

但我不知道如果我能做得更好,也應該在哪裏添加日期範圍過濾。

+1

你能指定要使用的服務器的類型? SQL Server,Oracle,MySQL等 – 2010-12-13 10:16:01

回答

2

從多刺的諾曼第一個查詢會給出如下結果:

q1 q2 count(*) 
no yes 2 
yes no 1 
yes yes 1 

其中只有幾組不同的結果。我假設你想按問題分組的總數是/否。在這種情況下,你必須做這樣的事情:

SELECT 'q1' as Question, s1.q1 as Answer, count(*) as Count 
FROM survey s1 
WHERE date>='2010-10-01' AND date<'2010-10-30' 
GROUP BY q1 
UNION 
SELECT 'q2' as Question, q2 as Answer, count(*) as Count 
FROM survey 
WHERE date>='2010-10-01' AND date<'2010-10-30' 
GROUP BY q2 

結果:

Question Answer Count 
q1  no  2 
q1  yes  2 
q2  no  1 
q2  yes  3 
3

你可以使用:

select q1, q2, count(*) 
from survey 
group by q1, q2 

或者,如果你想獲得那些完全一樣的結果:

select count(case when q1 = 'Yes' then q1 else null end) as q1_yes, 
     count(case when q1 = 'No' then q1 else null end) as q1_no, 
     count(case when q2 = 'Yes' then q2 else null end) as q2_yes 
from survey 

你實現「案」可能會有所不同,重要的是你可以設置一切你不想null,它不會被計數count():)