動物の遺伝子検査結果を比較する SQL Server 2008 レポートを書いています。遺伝子検査は、animalId、遺伝子、および結果で構成されます。すべての動物で同じ遺伝子がテストされるわけではありませんが、特定の動物セットの結果を並べて表示し、選択した動物の少なくとも 1 匹に存在する遺伝子のみを含める必要があります。
私の TestResult テーブルには、次のデータが含まれています。
animalId gene result
1 a CC
1 b CT
1 d TT
2 a CT
2 b CT
2 c TT
3 a CT
3 b TT
3 c CC
3 d CC
3 e TT
次のような結果セットを生成する必要があります。動物 3 が表示されていないことに注意してください (ユーザーはその結果を見たくありません)。また、動物 1 も動物 2 もその遺伝子の結果を持っていないため、遺伝子「e」の結果も表示されていません。
SireID SireResult CalfID CalfResult Gene
1 CC 2 CT a
1 CT 2 CT b
1 NULL 2 TT c
1 TT 2 NULL d
しかし、私はこれを取得することしかできません:
SireID SireResult CalfID CalfResult Gene
1 CC 2 CT a
1 CT 2 CT b
NULL NULL 2 TT c
1 TT NULL NULL d
これは私が使用しているクエリです。
SELECT
sire.animalId AS 'SireID'
,sire.result AS 'SireResult'
,calf.animalId AS 'CalfID'
,calf.result AS 'CalfResult'
,sire.gene AS 'Gene'
FROM
(SELECT
s.animalId
,s.result
,m1.gene
FROM
(SELECT [animalId ]
,result
,gene
FROM TestResult
WHERE animalId IN (1)) s
FULL JOIN
(SELECT DISTINCT
gene
FROM TestResult
WHERE animalId IN (1, 2)) m1
ON s.marker = m1.marker) sire
FULL JOIN
(SELECT
c.animalId
,c.result
,m2.gene
FROM
(SELECT animalId
,result
,gene
FROM TestResult
WHERE animalId IN (2)) c
FULL JOIN
(SELECT DISTINCT
gene
FROM TestResult
WHERE animalId IN (1, 2)) m2
ON c.gene = m2.gene) calf
ON
sire.gene = calf.gene
特定の遺伝子に関連付けられたレコードがない場合、SireID と CalfID の値を表示するにはどうすればよいですか? COALESCE を使用することを考えていましたが、渡す正しい animalId を指定する方法がわかりません。