[英]Oracle: Order By Alias, Invalid Identifier error
I'm getting an odd error, that I think I might know the answer to, but still can't seem to fix. 我收到一个奇怪的错误,我想我可能知道答案了,但仍然似乎无法解决。 It is saying that "LatestUpdatedDate" is an invalid identifier and I think it is because it runs the ORDER BY statement before it gets to the CASE statement, but that doesn't really make much sense with the way it is structured.
有人说“ LatestUpdatedDate”是一个无效的标识符,我认为这是因为它在到达CASE语句之前先运行ORDER BY语句,但这对它的结构方式并没有多大意义。 Have any ideas?
有什么想法吗?
SELECT * FROM
(
SELECT sym.*,
(
CASE WHEN shr_last_updt_dt >= trd_last_updt_dt
THEN shr_last_updt_dt
ELSE trd_last_updt_dt END
) AS LatestUpdatedDate,
row_number() over ( ORDER BY LatestUpdatedDate DESC ) AS line_number
FROM trdg_sym sym
WHERE ((wkly_rpt_dt = :settleDate)) AND ((lower(rpt_type_cd)=lower(:reportType)))
)
WHERE line_number BETWEEN 1 AND 25 ORDER BY line_number
The aliases will given after generating result set so you can't use them in Windowing functions. 别名将在生成结果集后给出,因此您不能在Windowing函数中使用它们。 You can do this:
你可以这样做:
SELECT * FROM
(
SELECT sym.*,
(
CASE WHEN shr_last_updt_dt >= trd_last_updt_dt
THEN shr_last_updt_dt
ELSE trd_last_updt_dt END
) AS LatestUpdatedDate,
row_number() over ( ORDER BY
(
CASE WHEN shr_last_updt_dt >= trd_last_updt_dt
THEN shr_last_updt_dt
ELSE trd_last_updt_dt END
) DESC ) AS line_number
FROM trdg_sym sym
WHERE ((wkly_rpt_dt = :settleDate)) AND ((lower(rpt_type_cd)=lower(:reportType)))
)
WHERE line_number BETWEEN 1 AND 25 ORDER BY line_number
or wrap your subquery to another 或将您的子查询包装到另一个
SELECT * FROM
(
SELECT *,
row_number() over ( ORDER BY LatestUpdatedDate DESC ) AS line_number
FROM
(
SELECT sym.*,
(
CASE WHEN shr_last_updt_dt >= trd_last_updt_dt
THEN shr_last_updt_dt
ELSE trd_last_updt_dt END
) AS LatestUpdatedDate
FROM trdg_sym sym
WHERE ((wkly_rpt_dt = :settleDate)) AND ((lower(rpt_type_cd)=lower(:reportType)))
)
)
WHERE line_number BETWEEN 1 AND 25 ORDER BY line_number
PS I don't sure for oacle
syntax, but should you give aliases to subquery? PS:我不确定
oacle
语法,但是您应该给子查询使用别名吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.