2014-05-21 79 views
0

我在這裏遇到了一些邏輯問題。試圖獲得SID不在我的子查詢中的行數。TSQL計數情況在

COUNT(CASE WHEN S.ID IN 
(SELECT DISTINCT S.ID FROM...) 
THEN 1 ELSE 0 END) 

我recieving錯誤:

Cannot perform an aggregate function on an expression containing an aggregate or a subquery. 

如何解決這個問題或其他選擇嗎?

+2

請顯示完整查詢條件。 –

+0

DISTINCT在這裏不做任何事情,我想你的意思是使用SUM而不是COUNT。 – adrianm

+0

@adrianm是的,這並沒有幫助... – kravits88

回答

5

也許這樣?

SELECT COUNT(*) FROM .... WHERE ID NOT IN (SELECT DISTINCT ID FROM ...) 
2

使用EXISTS

SELECT COUNT(t.*) FROM table1 t WHERE NOT EXISTS (SELECT * FROM table2 WHERE ID = t.ID) 
+0

它不會編譯... –

+0

如果table2爲空,則返回0.如果table2不爲空,它將返回table1中所有行的計數。 (提示:你需要存在WHERE子句) – adrianm

+0

@adrianm:是的,謝謝你的提示,更新。 – potashin

1

使用在與CTE構建。

with cte as 
    (
    select 
    case 
    when S.ID in (SELECT DISTINCT S.ID FROM LookupTable) then 1 
    else 0 
    end 
    as SID 
    from MyTable) 
    select count(SID) as SIDCOUNT from cte;