[英]Sort numbers with 0 as the last priority, PL/SQL keyword for priority
我有:
PROCEDURE A
(
inId IN NUMBER,
RC1 OUT SYS_REFCURSOR
) IS
tMessage VARCHAR2(128);
BEGIN
OPEN RC1 FOR
SELECT * FROM
(
SELECT
a.company,
SUM(a.holding_balance) balance
FROM TableNameEntries A
WHERE
A.BATCH_ID = inId
GROUP BY a.company
)
ORDER BY balance DESC ;
EXCEPTION
WHEN OTHERS THEN
tMessage :='Exception ' || SQLCODE || ': ' || SQLERRM;
OPEN RC1 FOR
SELECT tMessage FROM DUAL;
END A;
對於余額列,我的值類似於-1、0、1。 目前,它的排序方式類似於1 0 -1,但我不在乎零,因此我希望它類似於-1,1,0或1,-1,0
我如何在PL / SQL中做到這一點? 我試過了:
SELECT
a.company,
SUM(a.holding_balance) balance
FROM REC.CAG_GL_ENTRIES A
WHERE
A.BATCH_ID = 201311
order by case priority when 0 then 2 else 1 END priority
但這是說PRIORITY是無效的標識符。
我該如何工作?
嘗試:
ORDER BY CASE balance
WHEN 0 THEN null
ELSE balance
END
DESC NULLS LAST
您的情況有兩種方式(第二種較為常見,第一種更為清晰):
SELECT a.company,
SUM(a.holding_balance) balance
FROM REC.CAG_GL_ENTRIES A
WHERE A.BATCH_ID = 201311
order by abs(balance) desc;
SELECT a.company,
SUM(a.holding_balance) balance
FROM REC.CAG_GL_ENTRIES A
WHERE A.BATCH_ID = 201311
order by decode(balance,1,1,-1,1,2);
ORDER BY SIGN(ABS(balance)) DESC, balance
ABS()將所有負片都變為正片。 SIGN()將0變為0,> 0變為1(<0到-1)。 與DESC結合使用時,所有零均位於末尾,而所有非零均位於其上方,並且沒有特定的順序。 然后,我再次按余額排序以對非零進行排序。
您也可以使用
order by balance * balance desc
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.