2014-01-19 160 views
3

我無法找到解釋爲什麼我的思維錯誤。 我想要做的事,如:TSQL,COUNT中CASE中的SELECT語句

SELECT 
    COUNT(CASE WHEN (SELECT [Number] FROM [SOMETABLE] WHERE [id] = [GivenId]) = 3 THEN 1 ELSE 0 END) 
FROM [SomeOtherTable] 

我不斷收到

不能對包含聚合或子查詢的表達式執行聚合函數。

這將是很好的理解爲什麼我不能做我想做的事情。

而且,如果知道爲了得到相同的結果,我可以做什麼不同的事情。

+0

我沒有看到anythi這個問題不好。 – user1940676

回答

5

不能將COUNT(一個聚合函數)與一個不相關的表一起使用,即表[SOMETABLE]和[SomeOtherTable]之間必須存在某種關係。

一個可能的方法來完成這項工作將是:SQL code here

如果您不能訪問該鏈接,這裏是架構代碼:

create table yourtable (id int, graduates int, group_code varchar(100)); 

insert into yourtable values 
(1, 50, 'others'),(1, 20, 'something'), (2, 20, 'total'), (3, 35, 'total2'), 
(4, 40, 'total3'); 

create table othertable (ids int, graduate int, class varchar(100)) 
insert into othertable values (3,2, 'others') 

修改後的聲明:

SELECT SUM(CASE WHEN (o.ids) = 3 THEN 1 ELSE 0 END) 
FROM yourtable as y inner join othertable as o on y.group_code = o.class 
where o.graduate = 2 

**感謝Giles,我將COUNT聚合函數改爲SUM

+0

如果這不是'SELECT SUM(CASE WHEN(o.ids)= 3 THEN 1 ELSE 0 END)'? Count返回記錄的數量,無論它們是1還是0,因此上面的結果將與主查詢返回的數量記錄相同。 –

+0

你是對的Giles,我已經更新了答案 – Abhinav