从一个子查询更新两行

Posted

技术标签:

【中文标题】从一个子查询更新两行【英文标题】:Update two rows from one subquery 【发布时间】:2020-03-31 09:23:34 【问题描述】:

@tmp 表有两行有两个代码 local1 具有两个代码的值 我应该用两行代码的总和来更新@tmp

update @tmp set col1=(select sum (isnull(((isnull(e1,0.00)/100.00)
                                                * (isnull(e2, 0))),0.00))  
                from    @tmp tp left join
                        local1 l(nolock) 
                  on    l.code = tp.code    
                where   emp_code        = 123
                group by code )

【问题讨论】:

请用您正在使用的数据库标记您的问题:mysql、oracle、sql-server...? 您使用的是哪个 dbms? (该代码是特定于产品的。) Microsoft SQL 服务器管理工​​作室 2016 @jarlh 仅供参考,SSMS 只是客户端接口,并不暗示它所连接的数据库引擎。 @Mjv 。 . .样本数据和期望的结果真的很有帮助。您的公式看起来比简单的总和要复杂得多。而且您的查询引用的列比 2 多得多。 【参考方案1】:

一个选项使用窗口函数和可更新的 cte:

with cte as (select col1, sum(e1) over(partition by code) new_col1 from emp_code)
update cte set col1 = coalesce(new_col1, 0)

【讨论】:

以上是关于从一个子查询更新两行的主要内容,如果未能解决你的问题,请参考以下文章

mysql 行子查询

sql 行子查询

MySQL随记 - 子查询

多表查询

sqlserver 表 无法更新和删除 子查询返回的值不止一个

数据库子查询 ---where或having后面----列子查询-多行子查询