计算的 Column 结果是否可以在第二个 Column 中用作输入?甲骨文 SQL
Can a calculated Column result be used in a second Column as an input? Oracle SQL
我在 Oracle 中有一个 SQL 查询,它有一个使用 case 语句的计算列。我想使用新创建的列作为第二个计算列的输入。请在下面查看我的代码。
当我尝试 运行 时,出现错误 "PAYER_TYPE":标识符无效。那么有没有办法在第二列中使用 "PAYER_TYPE" 值?
SELECT
CASE
WHEN TYP IN ('Swap', 'Ton')
THEN
CASE
WHEN INDX_PAY = 'FIXED'
THEN 'FIXED'
ELSE 'FLAT'
END
END AS PAYER_TYPE,
CASE
WHEN TYPE = 'Swaption'
THEN
CASE
WHEN PAYER_TYPE = 'FIXED'
THEN PAY_LEG
ELSE REC_LEG
END
ELSE 0
END AS STRIKE
FROM Hedge.Details
一个简单的选项是内联视图,或者 - 最近 - CTE(常见 table 表达式)又名 WITH 分解子句。像这样:
with your_data as
(select case when ... then ...
when ... then ...
end paper_type --> PAPER_TYPE gets its value here ...
from some_table
where ...
)
select case when y.paper_type = 'A' then ... --> ... and is reused here
when y.paper_type = 'B' then ...
end result
from your_data y
您可以在子查询中生成该列PAYER_TYPE,然后在外部使用
SELECT
PAYER_TYPE,
CASE
WHEN TYP = 'Swaption'
THEN
CASE
WHEN PAYER_TYPE = 'FIXED'
THEN 'PAY_LEG'
ELSE 'REC_LEG'
END
ELSE '0'
END AS STRIKE
FROM
(
WITH Details(TYP,INDX_PAY) AS
(
SELECT 'Swap', 'FIXED' FROM DUAL UNION ALL
SELECT 'Ton' , 'FIX' FROM DUAL
)
SELECT
CASE
WHEN TYP IN ('Swap', 'Ton')
THEN
CASE
WHEN INDX_PAY = 'FIXED'
THEN 'FIXED'
ELSE 'FLAT'
END
END PAYER_TYPE,
TYP
FROM Details
)
PAYER_TYPE STRIKE
---------- ------
FIXED 0
FLAT 0
您收到错误消息是因为 PAYER_TYPE 不是 Hedge.Details 中的列。如果您真的想使用 PAYER_TYPE,请尝试以下操作:
SELECT
C1.PAYER_TYPE,
CASE
WHEN C1.TYPE = 'Swaption'
THEN
CASE
WHEN C1.PAYER_TYPE = 'FIXED'
THEN C1.PAY_LEG
ELSE C1.REC_LEG
END
ELSE 0
END AS STRIKE
FROM
(
SELECT
CASE
WHEN TYP IN ('Swap', 'Ton')
THEN
CASE
WHEN INDX_PAY = 'FIXED'
THEN 'FIXED'
ELSE 'FLAT'
END
END AS PAYER_TYPE,
TYPE,
PAY_LEG,
REC_LEG
FROM Hedge.Details
) AS C1
您最好的选择可能是保持简单并且不使用子查询方法,如下所示:
SELECT
CASE
WHEN TYP IN ('Swap', 'Ton')
THEN
CASE
WHEN INDX_PAY = 'FIXED'
THEN 'FIXED'
ELSE 'FLAT'
END
END AS PAYER_TYPE,
CASE
WHEN TYPE = 'Swaption'
THEN
CASE
WHEN TYP IN ('Swap', 'Ton') AND INDX_PAY = 'FIXED'
THEN PAY_LEG
ELSE REC_LEG
END
ELSE 0
END AS STRIKE
FROM Hedge.Details
我在 Oracle 中有一个 SQL 查询,它有一个使用 case 语句的计算列。我想使用新创建的列作为第二个计算列的输入。请在下面查看我的代码。
当我尝试 运行 时,出现错误 "PAYER_TYPE":标识符无效。那么有没有办法在第二列中使用 "PAYER_TYPE" 值?
SELECT
CASE
WHEN TYP IN ('Swap', 'Ton')
THEN
CASE
WHEN INDX_PAY = 'FIXED'
THEN 'FIXED'
ELSE 'FLAT'
END
END AS PAYER_TYPE,
CASE
WHEN TYPE = 'Swaption'
THEN
CASE
WHEN PAYER_TYPE = 'FIXED'
THEN PAY_LEG
ELSE REC_LEG
END
ELSE 0
END AS STRIKE
FROM Hedge.Details
一个简单的选项是内联视图,或者 - 最近 - CTE(常见 table 表达式)又名 WITH 分解子句。像这样:
with your_data as
(select case when ... then ...
when ... then ...
end paper_type --> PAPER_TYPE gets its value here ...
from some_table
where ...
)
select case when y.paper_type = 'A' then ... --> ... and is reused here
when y.paper_type = 'B' then ...
end result
from your_data y
您可以在子查询中生成该列PAYER_TYPE,然后在外部使用
SELECT
PAYER_TYPE,
CASE
WHEN TYP = 'Swaption'
THEN
CASE
WHEN PAYER_TYPE = 'FIXED'
THEN 'PAY_LEG'
ELSE 'REC_LEG'
END
ELSE '0'
END AS STRIKE
FROM
(
WITH Details(TYP,INDX_PAY) AS
(
SELECT 'Swap', 'FIXED' FROM DUAL UNION ALL
SELECT 'Ton' , 'FIX' FROM DUAL
)
SELECT
CASE
WHEN TYP IN ('Swap', 'Ton')
THEN
CASE
WHEN INDX_PAY = 'FIXED'
THEN 'FIXED'
ELSE 'FLAT'
END
END PAYER_TYPE,
TYP
FROM Details
)
PAYER_TYPE STRIKE
---------- ------
FIXED 0
FLAT 0
您收到错误消息是因为 PAYER_TYPE 不是 Hedge.Details 中的列。如果您真的想使用 PAYER_TYPE,请尝试以下操作:
SELECT
C1.PAYER_TYPE,
CASE
WHEN C1.TYPE = 'Swaption'
THEN
CASE
WHEN C1.PAYER_TYPE = 'FIXED'
THEN C1.PAY_LEG
ELSE C1.REC_LEG
END
ELSE 0
END AS STRIKE
FROM
(
SELECT
CASE
WHEN TYP IN ('Swap', 'Ton')
THEN
CASE
WHEN INDX_PAY = 'FIXED'
THEN 'FIXED'
ELSE 'FLAT'
END
END AS PAYER_TYPE,
TYPE,
PAY_LEG,
REC_LEG
FROM Hedge.Details
) AS C1
您最好的选择可能是保持简单并且不使用子查询方法,如下所示:
SELECT
CASE
WHEN TYP IN ('Swap', 'Ton')
THEN
CASE
WHEN INDX_PAY = 'FIXED'
THEN 'FIXED'
ELSE 'FLAT'
END
END AS PAYER_TYPE,
CASE
WHEN TYPE = 'Swaption'
THEN
CASE
WHEN TYP IN ('Swap', 'Ton') AND INDX_PAY = 'FIXED'
THEN PAY_LEG
ELSE REC_LEG
END
ELSE 0
END AS STRIKE
FROM Hedge.Details