私のテーブルには多くの種類のstatusidがあります。特定の値は、テーブルでの作業が「完了」していることを意味します。
何かが「完全」である場合、グループ化されたチェックIDのすべてのstatusid値は1または10または40です。statusid値は連続していません(多くのstatusid値があり、これは単なる抽出です)。誰かがcaseサブクエリでIn句を実行する方法、またはこれを記述するためのよりクリーンな方法を示すことができますか?
期待される結果セット
checkid iscomplete
3 0
4 1
5 0
6 0
行が1つだけで、「10」があるため、4は完了です。値の1つが「1」で、他の値が「2」であるため、3は完全ではありません。5は「30」の値しかないため、完全ではありません。6は「40」が1つあるため完全ではありませんが、「30」も1つあります。
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
エラー:
'Where'の近くで、条件が予期されるコンテキストで指定された非ブール型の式。
ありがとう。