如何比较 table 的两行

How to compare two rows of a table

我有一个示例 table,输入如图所示。实际上它有大量的数据。输入输出如图:

    I/P-                                                 O/P-

|ID | Role | Status |                     |ID | Role | Status | Final |
|:-:|:----:|:------:|                     |:-:|:----:|:------:|:-----:|
| 1 | ABC  |  Pass  |                     | 1 | ABC  |  Pass  |   0   |
| 2 | PQR  |  Pass  |                     | 2 | PQR  |  Pass  |   0   |
| 1 | ABC  |  Fail  |                     | 1 | ABC  |  Fail  |   0   |
| 3 | PQR  |  Fail  |                     | 3 | PQR  |  Fail  |   0   |               
| 1 | XYZ  |  Fail  |                     | 1 | XYZ  |  Fail  |   1   |
| 3 | PQR  |  Fail  |                     | 3 | PQR  |  Fail  |   1   |
| 3 | XYZ  |  Pass  |                     | 3 | XYZ  |  Pass  |   0   | 
| 4 | XYZ  |  Fail  |                     | 4 | XYZ  |  Fail  |   1   |

因此对于 'ID'(例如 ID=1),如果两个或更多记录的角色相同(例如角色 = 'ABC'),则状态字段。如果对于任何选定的记录 'Status' = 'Pass' 那么将为所有记录创建一个名为 Final 且值为 0 的新字段(如果对于任何记录 Status = 'Pass') 否则将保留它 1(如果没有 'Status' = 'Pass'.

的记录

我知道我们可以在比较列时使用 Case 语句来做到这一点。但不确定如何处理行。谁能帮帮我。

谢谢。

您可以进行存在性检查。并且可以根据您未指定的后端以不同的方式编写:

select Id, Role, Status, 
  case when exists (select * from myTable t2 
                    where t1.Id = t2.Id
                    and t1.Role = t2.Role
                    and t2.Status = 'Pass') then 0 else 1 end as Final
from myTable t1;

DBFiddle demo

PS:要么是你的样本输出有误,要么是你的解释。您可能需要根据实际需要更改where部分。