以下のクエリでエラーが発生することはわかっています。SELECT DISTINCT が指定されている場合は、ORDER BY 項目を選択リストに含める必要があります。
SELECT DISTINCT city
FROM HR.Employees
WHERE country = N'USA' AND region = N'WA'
ORDER BY birthdate;
この理由は何ですか?実際に何が起こっているのですか?DISTINCT を使用しないか、生年月日を SELECT または ORDER BY city のみに追加すると、出力は得られますが、エラーにはなりません。それはSELECT DISTINCT city
、都市のみを含む結果セットのみを提供し、他には何も提供しないためですか?
編集-(これは私の質問に対する答えかもしれません)
SELECT city
FROM HR.Employees
WHERE country = N'USA' AND region = N'WA'
上記のクエリを検討してください。確かではありませんが、これがどのように機能するかだと思います-舞台裏では、SQL Serverにはおそらくすべての列を含む結果セットがありますが、「表示セット」と呼ぶ都市列のみが表示されます。したがって、都市またはその他の列による順序付けは有効です。
代わりに SELECT DISTINCT city を使用すると、結果セットはどうなりますか? SQL サーバーの結果セットには、都市が DISTINCT の行だけが含まれているわけではありません。SELECT * クエリによって生成されたものと同様に、結果セット全体が含まれます。ただし、都市に基づいた個別の行のみが表示されます。この表示されたセットを生年月日に基づいて並べ替えることができますか? いいえ。
多くの従業員、つまり生年月日が多い都市では、SQL サーバーは、表示されたセットの順序付けにどの生年月日を使用する必要があるかを判断できません。そのため、エラー メッセージが表示されます。