我是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中的排序效应。 –