[英]SQL Server subquery/derived table update statement
我正在尝试在From
子句中编写使用派生表(?)的更新语句。 此更新语句需要一次更新3列。 派生表选择前6个,并按降序排列它们,以便在我更新它们时选择前1个,实际上是第6个(在其他语句中,我得到第1,第2,第3等)。 ,我现在只写第6个,因为它们都相同(或多或少))
我的问题是,我需要在派生表中的“ where”子句中指定要抓取的6套。 我有“ t1.trace_ID = t2.trace_ID”,但这将不起作用,因为t2在子查询之外。
我需要找到一种方法来根据Trace_ID确定要抓取的数据集。
有什么建议吗?
update t2
set RWK6_OPERATION_CODE = (select top 1 O_C.OPERATION_CODE),
RWK6_REASON = (Select top 1 O_C.REWORK_REASON),
RWK6_DATE = (Select top 1 o_C.OPERATION_CODE)
From plant.PIECE_DETAIL t2
inner join
(Select top 6
t1.TRACE_ID
,t1.OPERATION_CODE
,t1.REWORK_REASON
,t1.OPERATION_START_DATE_D
from app.OHCMS_ITEM_OPERATION_TRACE t1
where *t1.TRACE_ID = t2.TRACE_ID*
and REWORK_REASON is not null
order by OPERATION_START_DATE_D, OPERATION_START_TIME desc) as O_C
on O_C.TRACE_ID = t2.TRACE_ID
Where t2.rwk_cycle > 5
您可以将此表述为cross apply
:
From plant.PIECE_DETAIL t2 cross apply
(Select top 6 t1.*
from app.OHCMS_ITEM_OPERATION_TRACE t1
where t1.TRACE_ID = t2.TRACE_ID and
REWORK_REASON is not null and
t1.TRACE_ID = t2.TRACE_ID
order by OPERATION_START_DATE_D, OPERATION_START_TIME desc
) O_C
Where t2.rwk_cycle > 5
这有一点不同,因为它在子查询中找到匹配的行, 然后获取前6个。原始对象似乎先获取前6个, 然后进行匹配。 我不确定您真正想要的是哪种逻辑,但是您可以使用其他子查询或将外部比较移至where
子句来实现原始逻辑。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.