【发布时间】:2021-04-15 15:40:29
【问题描述】:
我正在尝试使用子选择更新具有列别名的表。问题是当我添加一个内部连接时,脚本会中断:
此更新有效,但子选择没有内部联接:
declare @erase table
(
id varchar(10),
total int
)
insert into @erase (id) select 'x'
declare @var1 int = 10
declare @var2 int = 10
declare @var3 int = 10
declare @var10 int = 10
declare @var11 int = 10
declare @var12 int = 10
update @erase
set id = num / den
FROM
(
select
'x' as id,
@var1 * @var2 * @var3 * @var10* @var11* @var12 as 'num',
@var1 + @var2 + @var3 + @var10+ @var11+ @var12 as 'den'
) as innerTable
但是当我添加 join 时它会中断:
declare @erase table
(
id varchar(10),
total int
)
insert into @erase (id) select 'x'
declare @var1 int = 10
declare @var2 int = 10
declare @var3 int = 10
declare @var10 int = 10
declare @var11 int = 10
declare @var12 int = 10
update @erase
set id = innerTable.num / innertable.den
from @erase inner join innertable on
@erase.id = innertable.id
FROM
(
select
'x' as id,
@var1 * @var2 * @var3 * @var10* @var11* @var12 as 'num',
@var1 + @var2 + @var3 + @var10+ @var11+ @var12 as 'den'
) as innerTable
我想使用cte,但我需要一个额外的num / den 存储库。以下将不起作用:
;with cte as
(
select
'x' as id,
@var1 * @var2 * @var3 * @var10* @var11* @var12 as 'num',
@var1 + @var2 + @var3 + @var10+ @var11+ @var12 as 'den',
num / den as 'total' -- will break
)
update @erase
set total = cte.total
from @erase inner join cte on
@erase.id = cte.id
如何在生成num / den 的同一事务中更新@erase?
编辑: 我找到了解决方法,但我仍然无法使用最终值“总计”进行更新:
;with cte as
(
select
'x' as id,
@var1 * @var2 * @var3 * @var10* @var11* @var12 as 'num',
@var1 + @var2 + @var3 + @var10+ @var11+ @var12 as 'den',
num / den as 'total' -- will break
)
update @erase
set total = num / den --Although I prefer using alias total.
from @erase inner join cte on
@erase.id = cte.id
【问题讨论】:
标签: sql-server tsql