SQL将列值解码为另一列

SQL将列值解码为另一列,sql,Sql,我正在使用PL/SQL 12。 我想解码一个列值以匹配另一个列值。我取列SP_-RANK和MOODY_-RANK中的最高值,并称之为RANK。我希望此列而不是值在SP或MOODYS中具有相应的值,具体取决于哪个值最高 下面是我的代码和一段数据 SELECT rv.updat , rv.instrumentid , greatest(nvl(rv.sp_rank, '-1') , nvl(rv.moody_rank, '-1')) AS "Rank" , rv.sp , rv.

我正在使用PL/SQL 12。
我想解码一个列值以匹配另一个列值。我取列
SP_-RANK
MOODY_-RANK
中的最高值,并称之为
RANK
。我希望此列而不是值在
SP
MOODYS
中具有相应的值,具体取决于哪个值最高

下面是我的代码和一段数据

SELECT rv.updat
  , rv.instrumentid
  , greatest(nvl(rv.sp_rank, '-1')
  , nvl(rv.moody_rank, '-1')) AS "Rank"
  , rv.sp
  , rv.moodys
  , rv.SP_Rank
  , rv.Moody_Rank
FROM ci.ratings_view rv
ORDER BY rv.updat ASC
表:

INSTRUMENTID | UPDAT      | Rank | SP  | MOODYS | SP_RANK | MOODY_RANK 
-------------+------------+------+-----+--------+---------+-----------
0203041      | 26/09/2019 | 100  | AAA | Aaa    | 100     | 100       
0203378      | 26/09/2019 | 100  | AAA | Aaa    | 100     | 100        
0203734      | 26/09/2019 | 100  | AAA | Aaa    | 100     | 100       
0204196      | 26/09/2019 | 100  | AAA | Aaa    | 100     | 100       
0204277      | 26/09/2019 | 100  | AAA | Aaa    | 100     | 100       
0413194      | 26/09/2019 | 75   | A   | NR     | 75      | -1        
0413216      | 26/09/2019 | 75   | A   | NR     | 75      | -1        
0413240      | 26/09/2019 | 75   | A   | NR     | 75      | -1        
0460583      | 26/09/2019 | 100  | AAA | NR     | 100     | -1        
0460656      | 26/09/2019 | 100  | AAA | NR     | 100     | -1        
0471534A     | 26/09/2019 | 100  | AAA | WR     | 100     | -1        
0491438      | 26/09/2019 | -1   | NR  | NR     | -1      | -1        

因此,与其说是
100
,不如说是
AAA
,而不是
75
A
,等等。

你可以用
CASE
语句来实现这一点:

选择
rv.update,
rv.instrumentid,
最大(nvl(rv.sp_排名,'-1'),
nvl(rv.moody_rank,'-1')作为“rank”,
rv.sp,
穆迪房车,
rv.SP_等级,
rv.U级,
案例
当合并(rv.moody_秩-1)>合并(rv.SP_秩-1)时,则为rv.moody
ELSE rv.SP
以纽兰克结束
从ci.U视图rv
按rv.updat asc订购

您可能需要添加一些额外的逻辑来处理关系,即使用哪个等级(SP或Moodys)

您能告诉我们您的预期结果吗?谢谢