テーブルで自己結合を行う必要があります。いくつかの列のリストを返して、少なくとも 2 つのテストが行われ、そのうちの少なくとも 1 つが「UN」の結果コード。
以下のように情報を取得するために他のテーブルに参加しています。問題は、ある日に「国連」の結果があったが、その日に他の検査を受けていない単一の結果行を持つ人を除外する方法がよくわからないことです.
クエリ結果 (列)
郡、DrugTestID、ID、名前、CollectionDate、DrugTestType、Results、Count(DrugTestType)
ID 12345 の正しい行がいくつかあります。しかし、ID 12346 は単一の行であり、行の結果が count (1) であることを示しています。彼らはこの日に「UN」の結果を出しましたが、その日は他の検査はありませんでした。これを除外したい。
次のクエリを試しました
選択する
c.desc を「郡」として、
「PID」としてのdt.pid、
dt.id を「DrugTestID」として、
p.id を「ID」として、
「参加者」としての bio.FullName、
CONVERT(varchar, dt.CollectionDate, 101) as 'CollectionDate',
「Drug Test Type」としてのdtt.desc、
結果としてのdt.result、
COUNT(dt.dru_drug_test_type) as 'Count Of Test Type'
から
dbo.Test as dt with (nolock)
dt.pid = h.id で dbo.History を h として結合します。
h.pid = p.id で p として dbo.Participant に参加します
BioData に bio.id = p.id の bio として参加します
p.CountyCode = c.code で (nolock) を使用して County を c として結合します。
dt.DrugTestType = dtt.code で (nolock) を使用して、DrugTestType を dtt として結合します。
内部結合
(
個別に選択
dt2.pid、
CONVERT(varchar, dt2.CollectionDate, 101) as 'CollectionDate'
から
(nolock) を使用した dt2 としての dbo.DrugTest
dt2.pid = h2.id で dbo.History を h2 として結合します。
h2.pid = p2.id で p2 として dbo.Participant に参加します
どこ
dt2.result = '国連'
および '11-01-2011' と '10-31-2012' の間の dt2.CollectionDate
および p2.DrugCourtType = 'AD'
) 派生として
dt.pid = 派生.pid で
そして convert(varchar, dt.CollectionDate, 101) = convert(varchar, derived.CollectionDate, 101)
グループ化
c.desc、dt.pid、p.id、dt.id、bio.fullname、dt.CollectionDate、dtt.desc、dt.result
注文
c.desc ASC、参加者 ASC、dt.CollectionDate ASC