有人能向我解釋爲什麼這是可能與SQL Server:排序查詢,它是如何工作的?
select column1 c,column2 d
from table1
order by c,column3
我可以COLUMN1因爲SELECT子句後應用ORDER BY子句中使用別名排序,但怎麼可能由一個排序專欄,我不retreiving?
在此先感謝。
有人能向我解釋爲什麼這是可能與SQL Server:排序查詢,它是如何工作的?
select column1 c,column2 d
from table1
order by c,column3
我可以COLUMN1因爲SELECT子句後應用ORDER BY子句中使用別名排序,但怎麼可能由一個排序專欄,我不retreiving?
在此先感謝。
FROM子句中的對象的所有列名都可用於ORDER BY,GROUPing或DISTINCT的情況除外。正如您所指出的,別名也可用,因爲SELECT語句在ORDER BY之前處理。
這是您信任優化程序的其中一種情況。
感謝Stuart,儘管它與邏輯查詢處理並不完全兼容:邏輯處理的每一步都會生成虛擬表,用作下一步的輸入。 – Jonysuise
根據聯機叢書(http://technet.microsoft.com/en-us/library/ms188385(v=sql.90).aspx)
ORDER BY子句可以包括那些沒有出現在 選擇列表項。但是,如果指定了SELECT DISTINCT,或者 語句包含GROUP BY子句,或者SELECT語句 包含UNION運算符,則排序列必須出現在選擇 列表中。
此外,當SELECT語句包含UNION運算符時, 列名稱或列別名必須是在第一個 選擇列表中指定的列名稱或列別名。
您可以通過別名您在選擇select column1 c
定義,然後你告訴它的,你是不包括在選擇一列進行排序,而是一個在表中仍然存在排序。這允許我們按照數據表達式進行排序,而不必在選擇中進行排序。
Select cost, tax From table ORDER BY (cost*tax)
您可以在ORDER BY子句中使用別名,但不能使用GROUP BY或HAVING子句中的別名,並且可以在要從中檢索數據的表中對ORDER BY中的任何列進行ORDER BY。 –