我有这个疑问:
SELECT *
FROM (SELECT ORDEN.* ,ROW_NUMBER() OVER (ORDER BY HDC_FEC) AS FILE
FROM (SELECT HDC_OPP AS numberOperation, HDC_FEC AS SystemDate,ESD_DES AS state,HDC_MTV AS motiveCode FROM HDC
LEFT JOIN TRM ON HDC.HDC_TRM = TRM.TRM_COD
...
我在OVER子句中收到错误'无效的标识符HDC_FEC。如果我用 SystemDate替换工作正常。为什么我不能使用HDC_FEC而不是SystemDate?
谢谢。
答案 0 :(得分:2)
您在子查询中为HDC_FEC
列提供了别名SystemDate
,因此您只能在外部查询中引用该别名:
SELECT *
FROM (SELECT ORDEN.* ,ROW_NUMBER() OVER (ORDER BY SystemDate) AS FILE
原始基础表列不可见 - 它们超出范围。您只能看到子查询中显示的内容。
如果您确实需要第二级子查询,那么您所显示的内容并不清楚。如果对子查询(where
)没有where ORDEN.some_col = ...
子句,则可以将row_number()
移动到相同级别的查询中。您可能还需要partition by
子句,但同样不清楚。 (也许您错误地创建了第二级子查询,因此您可以在真正需要group by
时添加partition
...?)