简体   繁体   English

比较SQL Server中同一列的两个值

[英]Compare two values of same column in SQL Server

I have two tables workorder and woactivity . 我有两个表workorderwoactivity

create table workorder
(
     id varchar(10), 
     description varchar(1)
);

insert into workorder (id, description)
values ('M37603', 'A'), ('M38440', 'B'), ('M38447', 'C');

create table woactivity
(
     PARENT varchar(10), 
     taskid int,
     result varchar(4)
)

insert into woactivity (PARENT, taskid, result)
values ('M37603', 1, 'PASS'), ('M37603', 2, 'FAIL'), ('M37603', 3, 'PASS'),
       ('M38440', 1, 'FAIL'), ('M38440', 2, 'FAIL'), ('M38447', 1, 'PASS'), 
       ('M38447', 2, 'PASS')

If I create a relationship between these two tables: 如果我在这两个表之间创建关系:

SELECT 
    WORKORDER.id, WOACTIVITY.taskid, WOACTIVITY.result   
FROM 
    WORKORDER   
LEFT JOIN 
    WOACTIVITY ON WOACTIVITY.PARENT = WORKORDER.id ;

I get this output: 我得到以下输出:

id    taskid result
--------------------    
M37603  1   PASS 
M37603  2   FAIL
M37603  3   PASS
M38440  1   FAIL
M38440  2   FAIL
M38447  1   PASS
M38447  2   PASS

but how I want is if any result fails for each id then the final result should show fail, if all result's pass for id then the final result is a pass - like this: 但是我想要的是如果每个id的任何结果都失败,那么最终结果应该显示失败,如果id的所有结果都通过了,那么最终结果就是通过-像这样:

 id      result
--------------------    
M37603  FAIL
M38440  FAIL
M38447  PASS

You can do this with aggregation: 您可以通过聚合来做到这一点:

select id, min(result) as result
from t
group by id

The rule is simple. 规则很简单。 We group by id, order by result, display result, which row_number = 1 我们按ID分组,按结果排序,显示结果,其中row_number = 1

;
WITH
cte_tmp
AS
(
    SELECT
        WORKORDER.id,
        ROW_NUMBER() OVER (PARTITION BY WORKORDER.id ORDER BY WOACTIVITY.result) AS rn,
        WOACTIVITY.result
    FROM
        workorder AS WORKORDER
        LEFT JOIN
            woactivity AS WOACTIVITY
            ON WOACTIVITY.PARENT = WORKORDER.id
)
SELECT id, result FROM cte_tmp WHERE rn = 1

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

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