0

テーブルに関連付けられている 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

4

2 に答える 2

1

2番目のアプローチの方が優れていますが、OUTER JOINのONステートメントに条件を追加する必要があります

SELECT DISTINCT YT.TITLE, YT.DETAILS, XT1.BCOLUMN AS CATEGORY1, XT2.BCOLUMN AS DIVISION 
FROM DB.YTABLE YT
LEFT OUTER JOIN DB.XTABLE XT1 ON (YT.ID_NUM = XT1.ID_NUM AND XT1.ACOLUMN = 'CATEGORY')
LEFT OUTER JOIN DB.XTABLE XT2 ON (YT.ID_NUM = XT2.ID_NUM AND XT2.ACOLUMN = 'DIVISION')
于 2013-05-03T14:39:23.037 に答える