SQL服务器subquery/derivedtable更新语句

SQL Server subquery/derived table update statement

我正在尝试编写一个在 From 子句中使用派生的 table(?) 的更新语句。此更新语句需要一次更新 3 列。派生的 table 选择前 6 个并按 desc 顺序对它们进行排序,这样当我更新它们时它选择前 1 个它实际上是第 6 个(在其他语句中我得到第 1、2、3。 ..等等,我现在只写第 6 个,因为它们都一样(或多或少))

我的问题是我需要在派生的 table "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 子句来实现原始逻辑。