繁体   English   中英

SQL Server子查询/派生表更新语句

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM