oracle sql developer中的IIF语句

Posted

技术标签:

【中文标题】oracle sql developer中的IIF语句【英文标题】:IIF statement in oracle sql developer 【发布时间】:2013-07-26 17:52:51 【问题描述】:

有一个我正在尝试转换为 oracle sql dev 的访问查询。似乎我在 IIf(vw_gdp_currentqry.LOC='0300','F','P') AS SRCE 有错误,有人可以帮忙

SELECT
vw_gdp_currentqry.YEAR, 
vw_gdp_currentqry.LOC, 
**IIf(vw_gdp_currentqry.LOC='0300','F','P') AS SRCE,** 
vw_gdp_currentqry.METHOD, 
vw_gdp_currentqry.current_value
FROM vw_gdp_currentqry
WHERE vw_gdp_currentqry.IND)='TOT';

【问题讨论】:

IIF 是访问特定的。您需要将语法转换为目标数据库支持的内容。解码、大小写是执行此操作的两个主要示例。 不仅访问而且 Transact SQL 具有内置函数 IIF。该问题与“通用” sql 区域有关。 【参考方案1】:

试试decode函数

SELECT
vw_gdp_currentqry.YEAR, 
vw_gdp_currentqry.LOC, 
decode (vw_gdp_currentqry.LOC,'0300', 'F', 'P' ) AS SRCE,
vw_gdp_currentqry.METHOD, 
vw_gdp_currentqry.current_value
FROM vw_gdp_currentqry
WHERE vw_gdp_currentqry.IND='TOT';

或使用case 语法

SELECT
vw_gdp_currentqry.YEAR,             
vw_gdp_currentqry.LOC, 
case vw_gdp_currentqry.LOC
  when '0300' then 'F'
  else 'P' 
end AS SRCE,
vw_gdp_currentqry.METHOD, 
vw_gdp_currentqry.current_value
FROM vw_gdp_currentqry
WHERE vw_gdp_currentqry.IND='TOT';

更多信息

Decode Case Case vs Decode

【讨论】:

【参考方案2】:

可以使用NULLIFNVL2 的组合。

如果vw_gdp_currentqry.LOCNOT NULL,则只能使用此组合,在您的情况下是这样:

SELECT
vw_gdp_currentqry.YEAR, 
vw_gdp_currentqry.LOC, 
nvl2(nullif(vw_gdp_currentqry.LOC,'0300'),'P','F'),
vw_gdp_currentqry.METHOD, 
vw_gdp_currentqry.current_value
FROM vw_gdp_currentqry
WHERE vw_gdp_currentqry.IND='TOT';

【讨论】:

以上是关于oracle sql developer中的IIF语句的主要内容,如果未能解决你的问题,请参考以下文章

T-SQL 中的求和 IIF

如何避免 Oracle SQL Developer 中的变量替换

为啥 SQL Developer 与 SQL Plus 中的 Oracle PL/SQL 响应时间存在差异?

Oracle SQL Developer 中的 Varchar2 变量

PHP 中的 Oracle SQL 请求不返回任何内容,但在 SQL Developer 中有效

为啥 APEX 和 Oracle SQL Developer 中的日期格式不同?