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

比较SQL Server中同一列的两个值,sql,sql-server,Sql,Sql Server,我有两个表workorder和woactivity 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(

我有两个表
workorder
woactivity

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')
如果我在这两个表之间创建关系:

SELECT 
    WORKORDER.id, WOACTIVITY.taskid, WOACTIVITY.result   
FROM 
    WORKORDER   
LEFT JOIN 
    WOACTIVITY ON WOACTIVITY.PARENT = WORKORDER.id ;
我得到这个输出:

id    taskid result
--------------------    
M37603  1   PASS 
M37603  2   FAIL
M37603  3   PASS
M38440  1   FAIL
M38440  2   FAIL
M38447  1   PASS
M38447  2   PASS
但是我想要的是,如果每个id的任何结果都失败,那么最终结果应该显示fail,如果id的所有结果都通过,那么最终结果就是通过-如下所示:

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

您可以通过聚合执行此操作:

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

您可以通过聚合执行此操作:

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

规则很简单。我们按id分组,按结果排序,显示结果,行数=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

规则很简单。我们按id分组,按结果排序,显示结果,行数=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

谢谢杀手皇后谢谢杀手皇后