SQLでCOALESCEした値をキーにマスタ参照する方法

SQL Server

SQLで伝票や社員マスタを結合する際、修正社員コードがある場合はそちらを優先して社員情報を取得したいケースがあります。本記事では、COALESCEで値を選択し、それをキーに社員マスタから情報を取得する方法を解説します。

COALESCEを使った基本的な値選択

まず、社員コードの優先順位を決めます。修正社員コードが存在する場合はそれを使用し、存在しない場合は元の社員コードを使用するには、次のように記述します。

COALESCE(M.修正社員コード, H.社員コード) AS 社員コード

この式は、修正社員コードがNULLでなければそちらを返し、NULLの場合は元の社員コードを返します。

COALESCEの結果を用いた社員マスタ参照

COALESCEで選択した社員コードを使って社員マスタを参照するには、JOIN句で再度結合します。直接COALESCE式をJOINのON句に使用することも可能です。

例。

LEFT JOIN 社員マスタ S ON S.社員コード = COALESCE(M.修正社員コード, H.社員コード)

これにより、修正社員コードがある場合はその社員情報、ない場合は元の社員コードの情報が取得できます。

SELECT文の組み立て例

全体のSELECT文は以下のように記述できます。

SELECT COALESCE(M.修正社員コード, H.社員コード) AS 社員コード, S.社員名, M.* FROM 伝票 H INNER JOIN 伝票明細 M ON H.明細NO = M.明細NO LEFT JOIN 社員マスタ S ON S.社員コード = COALESCE(M.修正社員コード, H.社員コード) WHERE ... ORDER BY ...;

この構成で、修正社員コードがある場合はそれに紐づく社員名を取得し、ない場合は元の社員コードに基づく社員名を取得できます。

注意点と応用

COALESCEの結果をJOINに使う場合、NULLや重複に注意が必要です。特に複数の修正社員コードが存在する場合は、想定外の行が取得されることがあります。

また、パフォーマンス面では、COALESCE式をON句に使うとインデックスが効きにくくなる場合があるため、大規模データでは事前に計算列として持たせることも検討すると良いです。

まとめ

修正社員コードを優先して社員マスタを参照したい場合、COALESCEで優先度を決め、LEFT JOINでマスタと結合するのが基本的な方法です。これにより、修正有無に応じて正しい社員情報を取得できます。

コメント

タイトルとURLをコピーしました