我有一个历史表,我只想返回第一个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
提前致谢。
答案 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;