ORACLE从历史表中查找第一个非空值

时间:2015-07-17 03:40:02

标签: oracle notnull

我有一个历史表,我只想返回第一个STATUS非空值(如果有的话)。我没有太多的ORACLE经验,我已经搜索过这个但找不到我需要的东西。

修改 我的下表示例。

ITEM   NAME   STATUS
Item1  Test1  Null
Item1  Test2  Null
Item1  Test3  Approved
Item2  Test1  Null
Item2  Test2  Approved

在上面的示例中,我只想返回以下行。

Item1 Test3 Approved
Item2 Test2 Approved

提前致谢。

3 个答案:

答案 0 :(得分:1)

你还没有明确表达你的意思"首先" (如何命令?),所以这样做:

return

答案 1 :(得分:1)

我认为您的意思是:对于项目的每个值,按名称排序具有非NULL状态的行并取第一个。如果这是正确的:

SELECT * FROM (
  SELECT
    item, name, status,
    row_number() OVER (PARTITION BY item ORDER BY name) AS rn
  FROM t
  WHERE status is NOT NULL
)
WHERE rn = 1

答案 2 :(得分:0)

通过引用@ WW的回答,如果你想要返回所有项目,那么只修改以下内容(即删除rownum条件)

SELECT *
FROM t
WHERE status IS NOT NULL;