这是我的查询,我确切地知道问题所在。它从select语句里面返回多个列,而它只更新一列。关键是第二列用于条件。 我怎样才能达到目标?是否有任何特定的SQL语法。
update xaddress B set (B.xrank)=
(select a.x1001olcsrl,row_number() over(partition by a.x1001olcsrl order by a.x1001olcsrl) as rnk
from xaddress a)
where x1001olcsrl=B.x1001olcsrl
答案 0 :(得分:0)
您需要再添加一个子查询以仅选择一列。替换'价值'与你的原始价值。
用于单行更新。
update xaddress
set xrank = (Select rnk from (select a.x1001olcsrl,row_number() over(partition by a.x1001olcsrl order by a.x1001olcsrl) as rnk
from xaddress) where x1001olcsrl= 'Value')
where x1001olcsrl= 'Value'
用于整个表格更新。
With CTE As
(
select x1001olcsrl,row_number() over(partition by x1001olcsrl order by x1001olcsrl as rnk
from xaddress
)
update xaddress
SET xrank = rnk
FROM xaddress a
INNER JOIN CTE b ON a.x1001olcsrl = b.x1001olcsrl
答案 1 :(得分:0)
使用MERGE
,这是oracle版本的update-with-join:
MERGE INTO xaddress a
USING (select
x1001olcsrl,
row_number() over(partition by x1001olcsrl order by x1001olcsrl) rnk
from xaddress) x
ON x.x1001olcsrl = a.x1001olcsrl
WHEN MATCHED THEN UPDATE
SET xrank = rnk