在SQL查询结果的空字段中放置一个预定义的值。

问题描述 投票:-1回答:1

我需要对某个SQL查询输出的数据进行操作,结果,只是通过修改原查询。由于这是一个Select-Where-From查询,作为一个SQL新手,我认为可以简单地将其嵌套在另一个这种类型的查询中,结果结构类似于。Select-Where-(Select-Where-From).

数据操作只需要将某一列中的所有空字段(该字段取自原查询结果)用一个特定的预定义值替换。下面是我做的两次尝试--基于这个网站的发现--都失败了。

select NAME_OF_COLUMN, COALESCE(NULLIF(NAME_OF_COLUMN,''), 'Value_to_insert')

from

(THIS IS WHERE THE ORIGINAL SELECT QUERY GOES)

这个尝试没有抛出错误,但还是产生了空字段,而不是用上面的值填充,就像只运行了原始查询一样。

第2个。

Select *, NAME_OF_COLUMN=
CASE WHEN NAME_OF_COLUMN IS NULL THEN 'Value_to_insert'
WHEN NAME_OF_COLUMN='' THEN 'Value_to_insert'
ELSE NAME_OF_COLUMN
END

from

(THIS IS WHERE THE ORIGINAL SELECT QUERY GOES)

这个错误如下(原谅我的表述混乱,但这不是我的决定)。

    java.sql.SQLSyntaxErrorException: ORA-00923: FROM keyword not found where expected
, org.eclipse.birt.report.engine.api.EngineException: Invalid bound column name: CREATOR_USER_NAME., org.eclipse.birt.report.engine.api.EngineException: Cannot get the result set metadata.
    org.eclipse.birt.report.data.oda.jdbc.JDBCException: SQL statement does not return a ResultSet object.
SQL error #1:ORA-00923: FROM keyword not found where expected;

你能不能帮助我,告诉我我做错了什么?也许我需要选择一个特定的列,或者使用'as'命令?

编辑: 我已经尝试将原来的选择替换为:

select table.column as NAME_OF_COLUMN

用这个代替

select nvl(table.column, 'Value_to_insert') as NAME_OF_COLUMN

不幸的是,就像第一次尝试一样,输出与原始查询的输出相同... ...

sql oracle null
1个回答
0
投票

NAME_OF_COLUMN=CASE ... END 在Oracle中是无效的。在(标准)SQL中,你不能这样分配一个列值。

如果你试图想出一个列的别名:那就需要去用 之后 的表达式。

CASE 
  WHEN name_of_column IS NULL THEN 'Value_to_insert'
  WHEN name_of_column = '' THEN 'Value_to_insert'
  ELSE name_of_column
END as name_of_column

在Oracle中,一个空字符串 '' 转换为 NULL 当你存储该值时。所以你的CASE表达式的第二个条件永远不会为真。整个事情可以简化为。

coalesce(name_of_column, 'Value_to_insert') as name_of_column

注意,你需要去掉 select * 部分,并明确列出所有其他列,不包括 name_of_column 否则,你的查询最终会有两个同名的列。

© www.soinside.com 2019 - 2024. All rights reserved.