我尝试使用ROW_NUMBER()
获取行号,但它显示以下错误:
无法格式化消息13:896 - 消息文件C:\ WINDOWS \ firebird.msg 未找到。动态SQL错误。 SQL错误代码= -104。令牌未知 - 第2行,第66栏。
这是我的代码:
SELECT avg(CSIDTL.RATING) ,SVD.SVCADVISORNAME, ROW_NUMBER() OVER(ORDER BY avg(CSIDTL.RATING) )
FROM T_APPT_BOOKING_MSTR MSTR ,T_APPT_CSI_SURVEY CSI,T_APPT_CSI_SURVEY_DTL CSIDTL,
T_SVC_SVCADVISOR_MASTER SVD
WHERE MSTR.APPTBKID = CSI.APPTBKID
AND CSI.CSI_SURVERYID = CSIDTL.CSI_SURVERYID
AND SVD.SVCADVISORID = MSTR.SVCADVISORID
AND CSI.FEEDBACK_STATUS = 'Y'
AND CSIDTL.question ='Service Advisor'
GROUP BY SVD.SVCADVISORNAME
ORDER by avg(CSIDTL.RATING)
答案 0 :(得分:8)
Firebird 3.0引入了ROW_NUMBER()
功能,仅在几天前发布。有关确切的语法,请参阅发行说明,第Window (Analytical) Functions章。您收到的错误表明您使用的是较旧版本的Firebird,但没有此功能。
答案 1 :(得分:1)
我在Firebird 2.5中使用它
参考:http://www.firebirdfaq.org/faq343/
SELECT rdb$get_context('USER_TRANSACTION', 'row#') as row_number, DUMMY, A.*
FROM your_table A
CROSS JOIN
(SELECT rdb$set_context('USER_TRANSACTION', 'row#',
COALESCE(CAST(rdb$get_context('USER_TRANSACTION', 'row#') AS INTEGER), 0) + 1) AS dummy
FROM rdb$database) dummy
答案 2 :(得分:0)
Firebird 2.5中的其他替代方法是使用发电机
CREATE GENERATOR tmp$rn;
UPDATE my_table t SET t.id_field = (SELECT FIRST 1 NEXT VALUE FOR tmp$rn AS "row_number"
FROM my_table ORDER BY another_field1 DESC, another_field2 DESC);
DROP GENERATOR tmp$rn;