Sql-Server
如果指定了 SELECT DISTINCT,則 ORDER BY 項目必須出現在選擇列表中
SELECT DISTINCT * FROM ( SELECT a.Title, a.ID FROM TableA a LEFT JOIN TableB b ON a.ID = b.XID) c ORDER BY CASE WHEN c.ID > 10 THEN c.Title ELSE c.ID END ASC
如果我移動
DISTINCT
到嵌套選擇,那麼兩者ID
和Title
應該是相同的類型,例如:INT
,但它們不是。
ID
和都Title
在選定的列中,有什麼問題?此外,此更改
CASE WHEN 1 <> 1
查詢執行沒有問題。
真正的問題是由數據類型轉換引起的。如果將此表達式添加到選擇列表中:
CASE WHEN c.ID > 10 THEN c.Title ELSE c.ID END
你會看到另一個錯誤。類似於:“將 nvarchar 值 ‘Some title’ 轉換為數據類型 int 時轉換失敗”。當您將 varchar 與 int 值進行比較時,根據數據類型優先級(SQL Server 需要將 Title 與 ID 進行比較以對最終結果集進行排序)varchar 應轉換為 int,因為 int 具有更高的優先級。