[SQL Server]DISTINCT與ORDER BY同時出現時產生錯誤「如果已指定 SELECT DISTINCT,則 ORDER BY 項目必須顯示於選取清單中。」

文章分類: SQL Server, SQL語法, 資料庫 / Database




我覺得這是一個滿怪的問題,簡單來說就是SELECT語法有DISTINCT時, ORDER BY一定要有明確的欄位,不過我需要的排序比較麻煩,結果就出錯了,出錯的語法像這樣

SELECT DISTINCT field1, field2
FROM tbl1
ORDER BY SUBSTRING(field1,5,1), SUBSTRING(field1,3,1)

像這種比較詭異的排序規則,就會跳出錯誤,解法有2種

解法1: 將查詢跟排序當作兩個查詢來看

SELECT * FROM
(
SELECT DISTINCT field1, field2
FROM tbl1
) AS tbl_tmp -- 建一個虛擬的表
ORDER BY SUBSTRING(tbl_tmp.field1,5,1), SUBSTRING(tbl_tmp.field1,3,1)

這樣就可以把DISTINCT跟ORDER BY分開,就不會出錯了

解法2: 將排序的規則加到SELECT的欄位中

SELECT DISTINCT field1, field2, SUBSTRING(field1, 5, 1) AS field1_1, SUBSTRING(field1, 3, 1) AS field1_2
FROM tbl1
ORDER BY field1_1, field1_2

因為值已經在SELECT的時候明確產生了,就不會出問題啦

相關文章 :

  1. [SQL][SQL Server]自動補足空白列數
  2. [SQL]查詢UNION後的列數

發表回應

Bad Behavior has blocked 9 access attempts in the last 7 days.