[英]Compare the values in the same column and with other column values in sql server
[英]Compare two values of same column in 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(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的任何結果都失敗,那么最終結果應該顯示失敗,如果id的所有結果都通過了,那么最終結果就是通過-像這樣:
id result
--------------------
M37603 FAIL
M38440 FAIL
M38447 PASS
您可以通過聚合來做到這一點:
select id, min(result) as result
from t
group by id
規則很簡單。 我們按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.