基于其他行sql

时间:2017-01-17 09:41:07

标签: sql sql-server-2008

我有一张桌子:

数据表详情:

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:如果至少一个状态在审核期间已过期,则 CustomerStatus未完成

  •   
  • 条件2:如果至少一个状态在审核期间等待,则 customerstatus正在等待

  •   
  • 条件3:如果所有状态均获得批准,则 customerStatus已完成

  •   

最终输出应如下:

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.

请告诉我这是否可以通过OUT OUT导出到另一个临时表(使用单个更新)

如果我方需要任何信息,请告诉我

1 个答案:

答案 0 :(得分:2)

您可以使用以下查询尝试此操作

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;

我得到了以下结果,

enter image description here

希望这会帮助你。