我想如何通过检查并使用 case 选择其值将 3 行相同的主键变成 1 行

How i want make 3 rows of the same primary key into 1 row by checking and choose its value using case

比如这里,来自这个table

key  | status
1001 |   A
1001 |   D
1001 |   C

层次结构为 C>D>A

如果统计数据中包含C作为值,则人员状态将变为一行中的C。它将是这样的:

key  | status
1001 |   C

它会忽略 D 和 A,因为它有值 C。如果它没有 C,那么它会先检查 D,然后再检查 A。 那么,我该怎么做呢?我不知道如何将第 3 行变成第 1 行。我尝试使用

''' CASE WHEN STATUS IN('C')THEN 'C'
         ELSE WHEN STATUS IN('D') THEN 'D'
         ELSE WHEN STATUS IN('A') THEN 'A'
    END AS STATUS '''

但它报错,仍然无法使该行变为 1

你可以试试下面的-

select key, status
from tablname
order by case when status='C' then 1 when status='D' then 2 when status='A' then 3 else 99 end 
FETCH FIRST 1 ROW

您可以使用解析函数row_number,如下所示:

Select * from
(Select t.*, 
       Row_number() over (partition by key order by case when status = 'C' then 1 
                                when status = 'D' then 2
                                when status = 'A' then 3 end) as rn
  From your_table)
Where rn = 1;