SSMS 2008 を使用して、1 つの行/クライアントだけを選択しようとしています。次の列を選択する必要があります: client_name
、end_date
、およびprogram
。一部のクライアントには、クライアント行が 1 つしかありません。しかし、他の人は複数持っています。
複数の行を持つクライアントの場合、通常は異なるend_date
とがありprogram
ます。例えば:
CLIENT PROGRAM END_DATE
a b c
a d e
a f g
h d e
h f NULL
これは、実際のデータの単純化されたバージョンです。ご覧のとおり、異なるクライアントが同じプログラム ("d") 内にある場合があります。ただし、同じクライアントが同じプログラムに複数回参加することはできません。
また、注意が必要なのは、end_date
が NULL になる可能性があることです。そのため、1 行を超えるクライアントを選択しようとしたときに、1 行を超える HAVING ステートメントを追加しました。しかし、これにより NULLEnd_date
行がすべて削除されました。
要約すると、クライアントごとに 1 つの行が必要です。したがって、合計行が 1 つのみのクライアント + 上記のクライアントのうち、次の基準を持つクライアント:
End_date
が最大または NULLの行のみを選択します。(ほとんどの場合、end_date
これらのクライアントでは は null です)。
できるだけ少ないロジックでこれを達成するにはどうすればよいですか?