我是Firebird數據庫。通過不工作使用「WITH」子句
我有下面的SQL,它連接ShortCode列數據,但沒有按照「WITH」子句中的ABC表ORDER_NUMBER列進行排序。
With TBL_SHORT_CODE (SHORT_CODE, FK_KEY) As
(
SELECT Distinct(XYZ.SHORT_CODE) As SHORT_CODE, ABC.FK_KEY
From ABC Join XYZ On ABC.PK_KEY = XYZ.FK_KEY
where XYZ.FK_KEY = '{009DA0F8-51EE-4207-86A6-7E18F96B983A}' And ABC.STATUS_CODE = 1
Order By ABC.ORDER_NUMBER
)
SELECT LIST(Distinct(TBL_SHORT_CODE.SHORT_CODE), ''), ABC.FK_BOM
From ABC
Join XYZ ON ABC.FK_KEY = XYZ.PK_KEY
Join TBL_SHORT_CODE On TBL_SHORT_CODE.FK_KEY = ABC.FK_KEY
where ABC.FK_BOM = '{009DA0F8-51EE-4207-86A6-7E18F96B983A}' And ABC.STATUS_CODE = 1
Group By ABC.FK_BOM
在此先感謝。
祝好!
維沙爾
你ORDER BY是「太早」或無意義的查詢處理器 –
只有一個公共表表達式的遞歸元件可以通過表達包括的命令,或者,使用'TOP'時請參閱http://stackoverflow.com/questions/3924940/sql-cte-and-order-by-affecting-result-set – Ric
@ric在Firebird中,您可以通過在with子句中進行排序,效果只是不能保證(當查詢計劃中沒有其他步驟導致排序時,可能會保留該排序)。在這種情況下,列表(distinct ...)的出現,在不相關字段上的group by以及幾個聯接都可能導致查詢計劃導致排序,從而消除with中的排序效應。 –