oracle 行列转换

2018-06-18 03:33:36来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

实际情况:工作中遇到这种表格,需要查询到每个key='key'(即费用编码)对应的key='value'(即减免金额)的值

因此就需要用到行列转换,方便查询

需要的查询结果如下

sql语句如下(两种方式):

(1)利用oracle中的decode函数

1 select t.index_id,
2        MAX(decode(t.key, 'key', t.value, null)) as fee_code,
3        MAX(decode(t.key, 'value', t.value, null)) as reduction_fee,
4        MAX(decode(t.key, 'devalue', t.value, null)) as overdue_payperiod
5   from LA_T_REDUCTION_REGULAR t
6  where t.contract_id = '20171205D0904J9C0_18'
7  group by t.index_id
8  order by t.index_id

(2)使用case-when-then-else

 1 SELECT t.index_id,
 2        MAX(CASE
 3              WHEN t.key = 'key' THEN
 4               t.value
 5              ELSE
 6               null
 7            END) fee_code,
 8        MAX(CASE
 9              WHEN t.key = 'value' THEN
10               t.value
11              ELSE
12               null
13            END) reduction_fee,
14        MAX(CASE
15              WHEN t.key = 'devalue' THEN
16               t.value
17              ELSE
18               null
19            END) overdue_payperiod
20   FROM LA_T_REDUCTION_REGULAR t
21  where t.contract_id = '20171205D0904J9C0_18'
22  GROUP BY t.index_id
23  order by t.index_id

相比较而言,使用decode函数sql语句显得更为简洁,但二者实际的内部逻辑是相同的,而且decode函数是oracle特有的。

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:彻底弄懂“PKIX path building failed”问题

下一篇:Java进阶篇(六)——Swing程序设计(下)