尝试将标志添加到每个对象ID的最大bscmpnstntotal中。这是薪酬数据,其中objectid代表特定组织,bscmpnstntotal等于给定雇员的总薪酬。我想要一个标志来指定每个组织中薪水最高的人:
WITH "return_skdjrltdorgoffcrtrstkyempl"
AS
(
SELECT
*,
ROW_NUMBER() OVER (PARTITION BY object_id ORDER BY bscmpnstntotal DESC) AS GroupRank
FROM ctetable
)
UPDATE "return_skdjrltdorgoffcrtrstkyempl"
SET highestpaidflag2 = CASE WHEN GroupRank = 1 THEN 1 ELSE 0 END;
我得到的错误是
错误:关系“ ctetable”不存在
答案 0 :(得分:2)
哇,什么名字。
问题在于您为CTE命名的方式与表相同(我相信),而表“遮盖了” CTE。您收到错误消息,因为表return_skdjrltdorgoffcrtrstkyempl
没有名为grouprank
的列。
您必须为CTE选择一个不同的名称,并将其与UPDATE
语句中的表(使用UPDATE ... FROM
)连接起来:
WITH shortname AS (...)
UPDATE ctetable
SET ...
FROM shortname
WHERE shortname.id = ctetable.id;
但是,我的建议是 not 将信息保留在数据库中。如果表数据更改,信息不会无效吗?在需要时根据表数据进行计算。