2013-04-16 51 views
2

我需要運行在每天學生總量的報告。我遇到的問題是,在我的子查詢中,我不能做一個適當的小組,以便在一天之內我想知道有多少人因爲某個特定的原因而出現。問題與子查詢

我的查詢是:

SELECT 
    DATE_FORMAT(session.signintime, '%b %d %Y') Date, 
    COUNT(session.session_id) 'Total', 
    (SELECT COUNT(aidyear) FROM session WHERE aidyear = '12-13') '12-13',   
    (SELECT COUNT(aidyear) FROM session WHERE aidyear = '13-14') '13-14' 
FROM session 
WHERE status = '3' 
GROUP BY Date; 

生成的報告爲:

+-------------+-------+-------+-------+ 
| Date  | Total | 12-13 | 13-14 | 
+-------------+-------+-------+-------+ 
| Apr 15 2013 | 47 | 38 | 25 | 
| Apr 16 2013 |  5 | 38 | 25 | 
+-------------+-------+-------+-------+ 
2 rows in set (0.00 sec) 

正如你看到的2013年4月16日共有5名的學生是。現在請注意,兩行的12-13 13-14是相同的。

當我嘗試通過子查詢中做一組我得到這個錯誤:

ERROR 1241(21000):操作數應包含1列(S)

這意味着子查詢返回的行數多於我的理解。

我試圖與此查詢:

SELECT 
     DATE_FORMAT(session.signintime, '%b %d %Y') Date, 
     COUNT(session.session_id) 'Total', 
     (SELECT DATE_FORMAT(session.signintime, '%b %d %Y') Date, 
     COUNT(aidyear) FROM session WHERE aidyear = '12-13' GROUP BY Date) '12-13', 
     (SELECT DATE_FORMAT(session.signintime, '%b %d %Y') Date, COUNT(aidyear) FROM session WHERE aidyear = '13-14' GROUP BY Date) '13-14' 
FROM session WHERE status = '3' 
GROUP BY Date; 

編輯1按照要求埃文

我從查詢表僅會話表。我不加入(如你注意到)

表有以下幾點:

Primary Key : session_id 
Foreign Key : anum(which is a student ID) 

然後我們有: why, aidyear, signintime, studentcomments, status

+0

您能否給我們提供正在查詢的表格的佈局以及一些示例數據? –

+0

更新的原文。 –

+0

以及數據的實際生活數據,我發現這個故障,我很喜歡嗯,哦.. –

回答

3

好像你應該能夠使用CASE與骨料:

SELECT DATE_FORMAT(session.signintime, '%b %d %Y') Date, 
    COUNT(session.session_id) 'Total', 
    sum(case when aidyear = '12-13' then 1 else 0 end) '12-13', 
    sum(case when aidyear = '13-14' then 1 else 0 end) '13-14' 
FROM session 
WHERE status = '3' 
GROUP BY Date; 
+0

哥們你真棒!我甚至不知道CASE。非常感謝,它的工作原理! –

+0

@RixhersAjazi歡迎您! – Taryn

+0

忘記點擊綠色支票,我改爲+1了你。 –