2012-08-22 234 views
0

我有這個簡單的(不實用)表SQL Server查詢

STUDENTID SERVICE 
1   a   
1   b   
1   c   
1   d   
1   e   
2   a   
2   b   
2   c   
2   d   
2   e   
3   a   
3   b   
3   c   
4   a   
4   f   
5   a   
5   d   
6   f   
6   g   
7   a   
7   b   
7   c   
7   d   
7   e   
8   a   
8   b   
8   c   
8   d   
8   e  

我想製表例如某些信息。

有多少學生已經註冊了服務'a'和服務'b'。
有多少學生已經註冊了服務'a'和服務'c'。
有多少學生已經註冊了服務'a'和服務'd'。等

多少學生已經簽署了服務「一」,比「一」另一個其他服務。
有多少學生註冊了服務'b'和除'b'以外的其他兩個服務。

未來的服務數量可能會發生變化,但現在沒關係。

這就是我現在所擁有的,它不工作。

--want返回任何其他服務誰已經簽署了一個學生的數量和1

select COUNT(STUDENTID), service from table 
group by service where service = 'a' and studentid in 
(select studentid from table group by STUDENTID having COUNT(service) = 2) 
+0

你問的問題是什麼? –

+0

根據表格 - 有多少學生註冊了服務「a」和除「a」以外的其他服務。或 有多少學生註冊了服務'b'和除'b'以外的其他兩個服務。 – Marin

回答

2

以下是關於您的問題的一些提示。

有多少學生已經註冊了服務'a'和服務'b'。

SELECT COUNT(*) 
FROM 
(
    SELECT studentID 
    FROM tableName 
    WHERE Service IN ('A', 'B') 
    GROUP BY StudentID 
    HAVING COUNT(studentID) = 2 
) a 

多少學生已經簽署了服務 'a' 和服務 'C' 孤單。

SELECT COUNT(*) 
FROM 
(
    SELECT studentID 
    FROM tableName 
    WHERE Service IN ('A', 'C') 
    GROUP BY StudentID 
    HAVING COUNT(studentID) = 2 
) a 
+0

@Marin。 。 。這是回答您的問題的正確方法。使用HAVING子句來定義各個組中要使用的特徵。 –

+0

這一個工作表示感謝。關於「有多少學生註冊了服務'b'以及'b'以外的其他兩個服務'」。這與此類似嗎?謝謝 – Marin

0

什麼:

select COUNT(t.STUDENTID) 
from 
(select studentid, service from table group by STUDENTID having COUNT(service) = 2) as t 
WHERE t.service = 'a' 
+0

嗨丹,由於某種原因,它會在哪裏引發錯誤。它執行AS,ID或quoted_ID。謝謝。 – Marin

+0

可能想要FROM(Sele ...)被別名...請參閱編輯 – Dan

0

您可以自行加入

SELECT COUNT(DISTINCT studentid) n 
FROM  table t1 
LEFT JOIN table t2 on (t1.studentid = t2.studentid) 
WHERE t1.service = 'a' AND t2.service <> 'a' 

或如果你想知道學生...

SELECT studentid, SUM(IF(service = 'a',1,0)) n_a, SUM(IF(service = 'a',0,1)) n_other 
FROM table 
GROUP BY studentid 
HAVING n_a = 1 AND n_other >= 1 
+0

您好Matt,感謝您的輸入。當我嘗試運行它時,我得到模棱兩可的列studentid(第一行)... – Marin

+0

我添加了t1.studentid謝謝 – Marin