D がすべて等しく、C の少なくとも 1 つが等しくないと言って、テーブル自体を結合することでそれを行うことができます。
CREATE TABLE #Source ( D1 VARCHAR(2), D2 VARCHAR(2), D3 VARCHAR(2), C4 VARCHAR(2), C5 VARCHAR(2), C6 VARCHAR(2) ); INSERT INTO #Source VALUES ('A', 'B', 'C', 'X1', 'X2', 'X3'); INSERT INTO #Source VALUES ('A', 'B', 'C', 'X1', 'X2', 'X4'); INSERT INTO #Source VALUES ('A', 'B', 'D', 'X1', 'X2', 'X3'); INSERT INTO #Source VALUES ('A', 'B', 'D', 'X1', 'X2', 'X3'); SELECT S1.D1, S1.D2, S1.D3, S1.C4 C4_1, S2.C4 C4_2, S1.C5 C5_1, S2.C5 C5_2, S1.C6 C6_1, S2.C6 C6_2 FROM #Source S1 INNER JOIN #Source S2 ON ( S1.D1 = S2.D1 AND S1.D2 = S2.D2 AND S1.D3 = S2.D3 AND ( S1.C4 <> S2.C4 OR S1.C5 <> S2.C5 OR S1.C6 <> S2.C6 ) ); DROP TABLE #Source;
プレ>次の結果が得られます:
<前>D1 D2 D3 C4_1 C4_2 C5_1 C5_2 C6_1 C6_2 ---- ---- ---- ---- ---- ---- ---- ---- ---- A B C X1 X1 X2 X2 X4 X3 A B C X1 X1 X2 X2 X3 X4
プレ>また、後で 共通テーブル式を使用する SQL クエリを使用しないものに変換する方法 (SQL Server 2000 の場合) .