繁体   English   中英

根据其他行sql更新行

[英]Update row based on other rows sql

我有一张桌子:

带有数据的表详细信息:

ID ReferenceNumber Status AuditPeriod  CustomerStatus
1       112        Expired 1/1/2016      
2       113        Pending 1/1/2016     
3       114        Expired 1/1/2016     
4       115        Pending 2/1/2016     
5       116        Approved 2/1/2016
6       117        Pending  2/1/2016
7       118        Approved 3/1/2016
8       119       Approved  3/1/2016 

现在,我需要通过基于状态列与auditperiod分组来更新CustomerStatus列。

  • 条件1:如果在审计期间至少有一个状态为“已过期”,则“ 客户 状态”为“未完成”

  • 条件2:如果在审核期间至少有一个状态为Pending,customerstatus为Pending

  • Condition3:如果所有状态都被批准,customerStatus为Completed

最终输出应如下:

ID ReferenceNumber Status AuditPeriod  CustomerStatus
1       112        Expired 1/1/2016    Not Completed
2       113        Pending 1/1/2016    Not Completed 
3       114        Expired 1/1/2016    Not Completed 
4       115        Pending 2/1/2016     Pending
5       116        Approved 2/1/2016    Pending
6       117        Pending  2/1/2016    Pending 
7       118        Approved 3/1/2016    Completed 
8       119       Approved  3/1/2016    Completed.

请让我知道是否可以在不导出到另一个临时表的情况下完成(使用单个更新)

请让我知道我是否需要任何信息

您可以使用以下查询进行尝试,

SELECT t1.ID, t1.ReferenceNumber, t1.Status, t1.AuditPeriod, t2.CustomerStatus from table1 t1
join (
    select AuditPeriod, 
           CASE 
             WHEN SUM(CASE WHEN Status = 'Expired' then 1 else 0 end) > 0 
               THEN 'Not Completed' 
             WHEN SUM(CASE WHEN Status = 'Pending' then 1 else 0 end) > 0 
               THEN 'Pending' 
             ELSE 'Completed' 
           END CustomerStatus
     from table1 
     group by AuditPeriod) t2 
 on t1.AuditPeriod = t2.AuditPeriod;

我得到了以下结果,

在此处输入图片说明

希望这对您有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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