2013-10-10 85 views
2

我有以下SQL語句:中選擇兩列的子查詢

SELECT Office, 
COUNT(Office) As Tot_Part, 
(SELECT Office, COUNT(Office) 
     FROM trespondent 
     WHERE completion_status= 'Started' 
     OR completion_status = 'Complete' 
     GROUP BY Office ORDER BY Office 
) As Total_Resp 
FROM trespondent 
WHERE completion_status <> 'New' 
GROUP BY Office 
ORDER BY Office 

我遇到的問題是在括號中的SELECT聲明 - 我所試圖做的是帶回兩個total人整體,然後total已啓動或已完成的人員。

1241 - 操作數應包含1列(S)

如果我有COUNT(Office),然後兩個列不匹配。

如何改進我的查詢以實現我期待的結果集?

Office Tot Resp 
London 20 2 
Leeds  30 17 

回答

5

在選擇列表中的任何子查詢必須是一個標量子查詢,這是它必須有一列和一行。

但在這種情況下,你並不需要一個子查詢都:

SELECT 
Office, 
COUNT(Office) As Tot_Part, 
SUM(completion_status IN ('Started', 'Complete')) AS Total_Resp 
FROM trespondent 
WHERE completion_status <> 'New' 
GROUP BY Office 
ORDER BY Office 

訣竅是行,其中的值是SUM()被1或0是一樣的COUNT()值爲1.並且MySQL將布爾表達式視爲1或0.

+0

Ooohhhh - 現在這相當出色 - 謝謝! –