[英]Compare two values of same column in SQL Server
I have two tables workorder
and woactivity
. 我有两个表
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')
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.