2013-06-04 221 views
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提高語法錯誤。

你會怎麼做?

+0

是否在nonNulls之前或之後出現空值? –

+0

@DavidAldridge在MySQL語法中(這似乎是他的目標),它會最後放置NULL。我想這可能只是一個例子。 –

+0

你是說'ORDER BY FIELD_1 NULLS LAST,FIELD_2,FIELD_1'嗎? –

回答

4

的NULL首先

這種表達是一種結構緊湊的Oracle語法非空值

返回0爲空值和1
Order by NVL2(FIELD_1,1,0), ... 

或者你可以使用一個case語句:

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

NULLs Last

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, ... 

...通過需要略少排序區。

+0

NVL2是一個很好的解決方案,我認爲你的價值已經交換了。 –

+1

嗯,尋求澄清... –

+0

爲什麼'CASE'?不應該有一個簡單的'NULLS LAST/FIRST'就足夠了嗎? –

0

我認爲你應該做一個複合字段和排序它

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

但是這將真正幫助,如果你發佈10-20例如記錄究竟顯示,想要達到的目標。