2012-02-28 102 views
2

我有一個人員列表,有4種類型可以發生以及每種類型5種分辨率。我試圖寫一個單一的查詢,以便我可以爲每個人提供每種類型/分辨率組合,但遇到問題。這是我到目前爲止有:使用從子查詢中的where子句中的select查詢中的字段

SELECT person, 
    TypeRes1 = (SELECT COUNT(*) FROM table1 where table1.status = 45) 
JOIN personTbl ON personTbl.personid = table1.personid 
WHERE person LIKE 'A0%' 
GROUP BY person 

我已經調整了列名,使之更多...通用的,但基本上是人表有幾百人,而我只是想A01至A09,所以像聲明是最簡單的方法來做到這一點。問題是,我的結果最終是這樣的:

Person TypeRes1 
A06  48 
A04  48 
A07  48 
A08  48 
A05  48 

這是不正確的。我無法弄清楚如何讓每個人的列數正確。我試着做類似:

SELECT person as p, 
TypeRes1= (SELECT COUNT(*) FROM table1 
JOIN personTbl ON personTbl.personid = table1.personid 
WHERE table1.status = 45 AND personTbl.person = p) 
FROM table1 
JOIN personTbl ON personTbl.personid = table1.personid 
WHERE personTbl.person LIKE 'A0%' 
GROUP BY personTbl.person 

但是,這給了我錯誤:無效的列名'p'。是否有可能將p傳遞給子查詢,還是有另一種方法來實現它?

編輯:還有19種不同的狀態,所以會有19種不同的TypeRes,爲簡潔起見,我只是把它放在一邊,我想我可以自己做其餘的。

回答

5

也許是這樣的:

SELECT 
    person, 
    (
     SELECT 
      COUNT(*) 
     FROM 
      table1 
     WHERE 
      table1.status = 45 
      AND personTbl.personid = table1.personid 
    ) AS TypeRes1 
FROM 
    personTbl 
WHERE person LIKE 'A0%' 
+0

輝煌!奇蹟般有效。非常感謝!昨天我幾個小時一直在掙扎着。 – Jetti 2012-02-28 15:19:52

+0

很高興幫助。快樂編碼:D – Arion 2012-02-28 15:22:33

+0

謝謝Arion!你用這個救了我的屁股。還保存了一些服務器空間,因爲我不必問相同的問題:) – ScruffMcGruff 2013-01-15 16:20:22