我想如何通过检查并使用 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;
比如这里,来自这个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;