Sql 如何通过使用case检查并选择其值,将同一主键的3行变成1行
例如,在这里,从这个表Sql 如何通过使用case检查并选择其值,将同一主键的3行变成1行,sql,oracle,concatenation,case,Sql,Oracle,Concatenation,Case,例如,在这里,从这个表 key | status 1001 | A 1001 | D 1001 | C 层次结构将是C>D>A 如果统计数据包含C作为值,则人员状态将在一行中变为C。它将是这样的: key | status 1001 | C 它将忽略D和A,因为它有值C。如果它没有值C,那么它将在A之前先检查D。 那么,我该怎么做呢?我不知道如何把3行变成1行。我试着用 ''' CASE WHEN STATUS IN('C')THEN 'C' ELSE
key | status
1001 | A
1001 | D
1001 | C
层次结构将是C>D>A
如果统计数据包含C作为值,则人员状态将在一行中变为C。它将是这样的:
key | status
1001 | C
它将忽略D和A,因为它有值C。如果它没有值C,那么它将在A之前先检查D。
那么,我该怎么做呢?我不知道如何把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
你可以试试下面的方法-
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
您可以按如下方式使用分析函数
行数
:
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;
您可以按如下方式使用分析函数
行数
:
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;