比较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
谢谢杀手皇后谢谢杀手皇后