0

大家好 :) 我很想在 Oracle 10g 中找到正确的 SQL 语法。我想想出这样的事情:

SELECT
  LAST_VALUE FIELD_INFO OVER(ORDER BY FIELD_1 IS NULL, FIELD_2, FIELD_1)
FROM TABLE_1

FIELD_1 IS NULL引发语法错误。

你会怎么做?

4

2 回答 2

4

NULL 优先

此表达式是一个紧凑的 Oracle 语法,对于 Nulls 返回 0,对于非 Nulls 返回 1

Order by NVL2(FIELD_1,1,0), ...

或者您可以使用 case 语句:

Order by Case when FIELD_1 is null then 0 else 1 end, ...

NULL 最后

Order by NVL2(FIELD_1,0,1)

Order by Case when FIELD_1 is null then 1 else 0 end, ...

此方法可能有部分优化:

Order by Case when FIELD_1 is null then null else 0 end nulls last, ...

...通过需要稍微少一点的排序区域。

于 2013-06-04T09:06:30.603 回答
0

我认为您应该创建一个复合字段并按其排序

COALESCE(FIELD_1,'[lots of spaces to ensure they go first]')||FIELD_2

但是,如果您发布 10-20 条示例记录以准确显示您想要实现的目标,这将非常有帮助。

于 2013-06-04T09:07:05.507 回答