如果你试图从一个表中读取列,并且对于每一行,将三个列值连接起来以确定应用于该行第四个列的转换操作,这时可以使用 DECODE
函数直接处理列值,而不需要(或不希望)使用绑定变量。只需从表中执行 SELECT
并在 DECODE
中直接对列值进行操作。
你只需要在 DECODE
的第一个参数位置使用一次 pcode
:
SELECT field1 || field2 || field3 AS pcode,
DECODE (
field1 || field2 || field3,
'A', amount_field * -1,
'A1A', amount_field * -1,
'A5', 0,
'A6', 0,
'B1', amount_field * -1,
'B5', amount_field * 0,
'B6', 0,
amount_field -- 默认值
) as my_new_column -- 为表中的每一行设置值
FROM my_table;
对于以下示例数据:
CREATE TABLE my_table (field1, field2, field3, amount_field) AS
SELECT 'A', NULL, NULL, 1 FROM DUAL UNION ALL
SELECT 'A', '1', 'A', 2 FROM DUAL UNION ALL
SELECT 'A', '5', NULL, 3 FROM DUAL UNION ALL
SELECT 'A', '6', NULL, 4 FROM DUAL UNION ALL
SELECT 'B', NULL, '1', 5 FROM DUAL UNION ALL
SELECT 'B', '5', NULL, 6 FROM DUAL UNION ALL
SELECT 'B', '6', NULL, 7 FROM DUAL;
查询结果如下:
| PCODE | MY_NEW_COLUMN |
|-------|---------------|
| A | -1 |
| A1A | -2 |
| A5 | 0 |
| A6 | 0 |
| B1 | -5 |
| B5 | 0 |
| B6 | 0 |
如果你想在查询中使用 WITH
子句,只需将其包裹在查询外部:
WITH codes (pcode, my_new_column) AS (
SELECT field1 || field2 || field3 AS pcode,
DECODE (
field1 || field2 || field3,
'A', amount_field * -1,
'A1A', amount_field * -1,
'A5', 0,
'A6', 0,
'B1', amount_field * -1,
'B5', amount_field * 0,
'B6', 0,
amount_field
)
FROM my_table
)
SELECT *
FROM codes;
这将得到与之前相同的输出结果。
在线演示