2012-09-18 50 views
1

我的表中有很多種statusid。某些值意味着表中的工作是「完整的」。SQL Server案例計數在子查詢中Jelp?

如果某些內容是「完整的」,則分組checkid的所有statusid值都是 1或10或40.狀態值不是連續的(有很多statusid值,這只是一個摘錄)。有人可以展示我可以如何在案例子查詢中使用In Clause,或者只是一種更清晰的方式來編寫它?

預期的結果集

checkid iscomplete 
    3   0 
    4   1 
    5   0 
    6   0 

4是完整的,因爲只有一行,它有一個「10」。 3不完整,因爲其中一個值爲「1」,但其他值爲「2」。 5不完整,因爲它只有「30」個值。 6不完整,因爲它有一個「40」,但它也有一個「30」。

DML:

create table #test1 (test1id int identity primary key , checkid int , statusid int) 
insert into #test1 (checkid , statusid) values (3 , 1) 
insert into #test1 (checkid , statusid) values (3 , 2) 
insert into #test1 (checkid , statusid) values (3 , 2) 
insert into #test1 (checkid , statusid) values (4 , 10) 
insert into #test1 (checkid , statusid) values (5 , 30) 
insert into #test1 (checkid , statusid) values (5 , 30) 
insert into #test1 (checkid , statusid) values (6 , 30) 
insert into #test1 (checkid , statusid) values (6 , 40) 

select checkid 
, iscomplete = (case when count(*) Where #test1.statusid In (1,10,40) Then 1) 
from #test1 
group by checkid 

錯誤:

An expression of non-boolean type specified in a context where a condition is expected, near 'Where'.

感謝。編寫一個查詢,以滿足要求

回答

2

一種方法是:

SELECT 
    t.checkid, 
    CASE 
     WHEN COUNT_BIG(*) = COUNT 
      (
      CASE 
       WHEN t.statusid IN (1,10,40) 
       THEN 1 
       ELSE NULL 
      END 
      ) 
     THEN 1 
     ELSE 0 
    END 
FROM #test1 AS t 
GROUP BY 
    t.checkid 
ORDER BY 
    t.checkid; 

這需要的事實,即在COUNT(表達)合計不計NULL(aisde:雖然COUNT(*)會)。對於所有條目爲狀態1,10或40的組,嵌套的CASE將爲該組中的每一行返回1,等於該組的COUNT(*)。如果組的一個成員不是狀態1,10或40,則嵌套的CASE將返回NULL,這將不會被COUNT計算在內。