建設プロジェクトの CRM では、クライアント、建築家、およびその他の請負業者はすべてアカウントとして存在します。テーブル PROJ_AC_LINK は ACCOUNT を PROJECT にリンクし、フィールド PROJ_AC_LINK.ROLE_TYPE_ID はそのリンクが表すものを指定します (たとえば、Joe Simms は役割「建築家」の下でプロジェクト 101 にリンクされています)。
CRM データベースとユーザー インターフェイスにより、ユーザーは複数のアカウントを同じロールの下のプロジェクトにリンクできます。場合によってはこれで問題ありません (プロジェクトに 2 人の建築家がいる) 場合もありますが、そうでない場合もあります (プロジェクトに対して請求する「クライアント」は 1 人だけであるべきです)。CRMを変更できません。
別のシステムからのクエリは、SITE_ADDRESS および CLIENT_ADDRESS を取得しようとし、各プロジェクトにリンクされているクライアントが 1 つだけであると想定します。次のようにクエリします (205 はロール「クライアント」のコードです)。
SELECT
PROJECT.ADDRESS AS SITE_ADDRESS,
ACCOUNT.ADDRESS AS CLIENT_ADDRESS
FROM PROJECT
LEFT JOIN PROJ_AC_LINK ON
(PROJ_AC_LINK.PROJECT_ID = PROJECT.PROJECT_ID
AND
PROJ_AC_LINK.ROLE_TYPE_ID = '205')
LEFT JOIN ACCOUNT ON PROJ_AC_LINK.ACCT_ID = ACCOUNT.ACCT_ID
プロジェクトにクライアントがリンクされていない場合でも、このクエリは SITE_ADDRESS を返しますが、CLIENT_ADDRESS には NULL を返します。これはまさに私が望んでいたことです。
そのシステムを使用している人々は、空白の顧客アドレスを取得した場合、CRM の人々に知らせることを知っています。ただし、プロジェクトに複数のクライアントがリンクしている可能性に対応する必要があります。
その役割のそのプロジェクトの PROJ_AC_LINK に複数のレコードがある場合に、CLIENT_ADDRESS が NULL (またはカスタム テキスト) を返すようにする方法はありますか。
何か案は?