簡體   English   中英

比較SQL Server中同一列的兩個值

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

我有兩個表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')

如果我在這兩個表之間創建關系:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM