SQL Server 2008で分割表を作成する方法を検討しています。これらは、必ずしも2x2の一般的なマトリックスに表示される必要はありません。誰かが私よりも良い解決策を見ることができるかどうか知りたいだけです。
明確にするために写真を参照してください。赤い文字は、わかりやすくするために正方形の名前です。ラベルX+は、Xがそのセルに存在することを意味し、その逆も同様です。
クエリを表すテーブルのボックスの文字でクエリにラベルを付けます
A
select count(*) from
(
select distinct p.patientid
from Patient as p
inner join icdpatient as picd on picd.patientid = p.patientid
and picd.admissiondate = p.admissiondate
and picd.dischargedate = p.dischargedate
inner join tblicd as t on t.icd_id = picd.icd_id
where t.icdText like '%x%'
) as t
inner join
(
select distinct p.patientid
from Patient as p
inner join icdpatient as picd on picd.patientid = p.patientid
and picd.admissiondate = p.admissiondate
and picd.dischargedate = p.dischargedate
inner join tblicd as t on t.icd_id = picd.icd_id
where t.icdText like '%y%'
) as s on s.patientid=t.patientid
B
select count(*) from
(
select distinct p.patientid
from Patient as p
inner join icdpatient as picd on picd.patientid = p.patientid
and picd.admissiondate = p.admissiondate
and picd.dischargedate = p.dischargedate
inner join tblicd as t on t.icd_id = picd.icd_id
where t.icdText like '%x%'
) as t
left join
(
select distinct p.patientid
from Patient as p
inner join icdpatient as picd on picd.patientid = p.patientid
and picd.admissiondate = p.admissiondate
and picd.dischargedate = p.dischargedate
inner join tblicd as t on t.icd_id = picd.icd_id
where t.icdText like '%y%'
) as s on s.patientid=t.patientid
where s.patientid is null
C
select * from
(
select distinct p.patientid
from Patient as p
inner join icdpatient as picd on picd.patientid = p.patientid
and picd.admissiondate = p.admissiondate
and picd.dischargedate = p.dischargedate
inner join tblicd as t on t.icd_id = picd.icd_id
where t.icdText like '%x%'
) as t
right join
(
select distinct p.patientid
from Patient as p
inner join icdpatient as picd on picd.patientid = p.patientid
and picd.admissiondate = p.admissiondate
and picd.dischargedate = p.dischargedate
inner join tblicd as t on t.icd_id = picd.icd_id
where t.icdText like '%y%'
) as s on s.patientid=t.patientid
where t.patientid is null
Dこれは少し気が引けるけど、こういうことをやろうと思う
declare @d int
set @d = (select count(distinct p.patientid) from Patient as p) - b -c
これは、母集団全体を見つけて、Xのみとyのみでそれらを減算することを目的としています。