は、私は2つのテーブルを持っています。
どちらのテーブルにもステータスカラムがあります。SQL選択行
- すべてのアドレス行のステータス列が「キャンセル」されている場合、Personエントリのステータス値は「キャンセル」されます。
- Addressテーブルのすべての行が「完了」の場合、Personのステータス値は「完了」になります。
- 住所表の行のいずれかがキャンセルされ、 の残りが「完了」の場合、人物ステータスは「完了」になります。
- アドレスの行の1つは、まだ「INPROGRESS」である場合、人の状態は 「INPROGRESS」
になります私は、アドレステーブルにその人のために、すべての行Personテーブル内のすべてのPERSONIDを選択したいです'inprogress'ステータスは持っていませんが、Person.Status = 'inprogress'を持っています
私はffを実行することでこれをやろうとしています。
select personID
from Person P
where P.status not in ('completed','canceled') and
P.personID in (
select A.personID
from Address A
where A.status in ('completed','canceled')
and A.personID = P.personID
group by personID
)
キャンセルして完了したがまだ進行中の行がある可能性があるpersonIDを選択している可能性があるかどうかわかりません。
私は通常、サブクエリの 'GROUP BY'を削除できると言っています。多分、SQL Serverはそれをより良くするためにDISTINCTを使いたいと思っていますか? – jarlh
いくつかのサンプルテーブルデータと期待される結果、および書式付きテキストを追加します。 – jarlh
要件を変更しただけで、以下の回答が無効になりました。クエリを使用してステータスを計算するのか、それとも既に存在するものを選択したいですか? –