テーブルの特定の行が結果セットの列である結果セットを作成するために使用する必要があるテーブルがあります。テーブルで s を複数回チェーンし始めましたLEFT JOIN
が、既にセットにある別の結果の異なる組み合わせである結果を排除する必要があります。
たとえば、結果列として 1、21、25 を取得した場合、結果にこれらの数値の他の組み合わせを含めることはできません。
私のテーブル定義は次のとおりです。
Table tblKPIDetails
Column Month int
Column Year int
Column Division varchar(3)
Column KPI int
Column Value decimal(18,4)
私の現在のクエリは次のとおりです。
SELECT *
FROM tblKPIDetails J1
LEFT JOIN tblKPIDetails J2 ON J2.Month = J1.Month AND J2.Year = J1.Year AND J2.Division = J1.Division AND NOT(J2.KPI = J1.KPI ) AND (J2.KPI = 1 OR J2.KPI = 21 OR J2.KPI = 25)
LEFT JOIN tblKPIDetails J3 ON J3.Month = J1.Month AND J3.Year = J1.Year AND J3.Division = J1.Division AND NOT(J3.KPI = J1.KPI ) AND (J3.KPI = 1 OR J3.KPI = 21 OR J3.KPI = 25)
WHERE J1.KPI = 1 OR J1.KPI = 21 OR J1.KPI = 25
これが間違っていることはわかっていますが、必要なもののスーパーセットです。上記のクエリの結果では、J1.KPI、J2.KPI、J3.KPI または J1.KPI、J3.KPI、J2.KPI、またはその他の組み合わせを取得できます。
私の期待される結果は次のようになります。
Division | Month | Year | KPIA | KPIAValue | KPIB | KPIBValue | KPIC | KPICValue
部門別、月別、年別
ここで、KPIA、KPIB、または KPIC = 1、21、または 25 ですが、部門|月|年ごとに 1、21、25 の組み合わせは 1 つだけ存在します。
編集
予想される結果をもう少し明確にするために、上記のクエリを使用すると、次の結果が得られます。
Division | Month | Year | KPIA | KPIAValue | KPIB | KPIBValue | KPIC | KPICValue
--------------------------------------------------------------------------------
000 1 2012 1 1000 21 2000 25 3000
000 1 2012 21 2000 1 1000 25 3000
000 1 2012 25 3000 21 2000 1 1000
111 1 2012 1 555 21 10000 25 5000
結果が最初の3つの結果のいずれか1つになり、次に最後の結果になるようにする必要があります...例:
Division | Month | Year | KPIA | KPIAValue | KPIB | KPIBValue | KPIC | KPICValue
--------------------------------------------------------------------------------
000 1 2012 25 3000 21 2000 1 1000
111 1 2012 1 555 21 10000 25 5000