次のようなAnswersという(簡略化された)テーブルが与えられた場合
Id Person Answer Priority
1 Tom France Low
2 Tom Germany High
3 Fred England Low
4 Amy Italy High
最も優先度の高い回答を示す 1 行を 1 人につき 1 行返す SQL クエリを書きたいと思います。私の考えは、自己結合を使用することでした
SELECT *
FROM Answers aLow
LEFT OUTER JOIN Answers aHigh
ON aLow.Person = aHigh.Person
AND aLow.Priority = 'Low'
AND aHigh.Priority = 'High'
次に、プライオリティ列がnullではないコードを調べますが、それはTomの余分な行を返します
Id Person Answer Priority Id Person Answer Priority
1 Tom France Low 2 Tom Germany High
2 Tom Germany High NULL NULL NULL NULL
3 Fred England Low NULL NULL NULL NULL
4 Amy Italy High NULL NULL NULL NULL
このアプローチを使用すると、目的の出力は次のようになります
Id Person Answer Priority Id Person Answer Priority
1 Tom France Low 2 Tom Germany High
3 Fred England Low NULL NULL NULL NULL
4 Amy Italy High NULL NULL NULL NULL
シンプルなものが欠けているに違いないと確信していますが、指を置くことはできません。
私は何が欠けていますか?この問題にアプローチするより良い方法はありますか?