大家好:)我很努力地想出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
提高語法錯誤。
你會怎麼做?
大家好:)我很努力地想出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
提高語法錯誤。
你會怎麼做?
的NULL首先
這種表達是一種結構緊湊的Oracle語法非空值
返回0爲空值和1Order 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, ...
...通過需要略少排序區。
NVL2是一個很好的解決方案,我認爲你的價值已經交換了。 –
嗯,尋求澄清... –
爲什麼'CASE'?不應該有一個簡單的'NULLS LAST/FIRST'就足夠了嗎? –
我認爲你應該做一個複合字段和排序它
COALESCE(FIELD_1,'[lots of spaces to ensure they go first]')||FIELD_2
但是這將真正幫助,如果你發佈10-20例如記錄究竟顯示,想要達到的目標。
是否在nonNulls之前或之後出現空值? –
@DavidAldridge在MySQL語法中(這似乎是他的目標),它會最後放置NULL。我想這可能只是一個例子。 –
你是說'ORDER BY FIELD_1 NULLS LAST,FIELD_2,FIELD_1'嗎? –