テーブルに関連付けられている 2 つの値を選択し、それらが存在しない場合は null 値を設定します。ただし、レコードごとに 1 行だけが必要です。以下のクエリを実行すると、CASE ステートメントによって重複する行が作成されます。
SELECT DISTINCT YT.TITLE, YT.DETAILS,
CASE WHEN XT.ACOLUMN = 'CATEGORY' THEN XT.BCOLUMN END AS CATEGORY,
CASE WHEN XT.ACOLUMN = 'DIVISION' THEN XT.BCOLUMN END AS DIVISION
FROM DB.YTABLE YT
LEFT OUTER JOIN DB.XTABLE XT
ON YT.ID_NUM = XT.ID_NUM
欲しいデータ:
TitleExample1、DetailsExample1、Category1、Division1
TitleExample2、DetailsExample2、null、Division2
私が得ているデータ:
TitleExample1、DetailsExample1、Category1、null
TitleExample1、DetailsExample1、null、Division1
TitleExample1、DetailsExample1、null、null
TitleExample2、DetailsExample2、null、Division2
TitleExample2、DetailsExample2、null、null
また、同じテーブルに対して複数のテーブル ID を使用して結合を試みました。
SELECT DISTINCT YT.TITLE, YT.DETAILS, XT1.BCOLUMN AS CATEGORY1,
XT2.BCOLUMN AS DIVISION
LEFT OUTER JOIN DB.XTABLE XT1
ON YT.ID_NUM = XT.ID_NUM
LEFT OUTER JOIN DB.XTABLE XT2
ON YT.ID_NUM = XT.ID_NUM
WHERE XT1.ACOLUMN = 'CATEGORY' AND
XT2.ACOLUMN = 'DIVISION'
これは、カテゴリと区分の両方の値が設定されている場合にうまく機能します。ただし、タイトルと詳細のレコードにカテゴリまたは部門が関連付けられていない場合、クエリはレコードを選択しません。
欲しいデータ:
TitleExample1、DetailsExample1、Category1、Division1
TitleExample2、DetailsExample2、null、Division2
私が得ているデータ:
TitleExample1、DetailsExample1、Category1、Division1