2015-07-01 20 views
0

我在制定此問題時遇到問題,因此我將舉例說明。考慮我的表作爲,從具有特定列值但按不同列值排序的表中獲取所有行

CREATE TABLE ABC 
(
    PID NUMBER(10,0) NOT NULL, 
    DISP_COL VARCHAR2(100 BYTE), 
    VAL_COL VARCHAR2(20 BYTE), 
    ORD_COL1 NUMBER(5,2), 
    ORD_COL2 NUMBER(5,2), 
    CONSTRAINT PK_PID PRIMARY KEY 
    (
     PID 
    ) 
); 

而且我是數據,

PID | DISP_COL | VAL_COL | ORD_COL1 | ORD_COL2 
---------------------------------------------- 
1 | DISP1 | VAL1 | 1  | 14 
2 | DISP2 | VAL26 | 2  | 22 
3 | DISP1 | VAL8 | 1  | 17 
4 | DISP1 | VAL56 | 1  | 9 
5 | DISP2 | VAL9 | 2  | -10 
6 | DISP3 | VAL12 | 2  | 20 
7 | AISP1 | VAL7 | 2  | -3 

現在基於ORD_COL1,ORD_COL2從高到低排序,我想要得到的唯一DISP_COL值,然後的所有行DISP_COL值將遵循。所以,我的數據謹

PID | DISP_COL | VAL_COL | ORD_COL1 | ORD_COL2 
---------------------------------------------- 
2 | DISP2 | VAL26 | 2  | 22 
5 | DISP2 | VAL9 | 2  | -10 
6 | DISP3 | VAL12 | 2  | 20 
7 | AISP1 | VAL7 | 2  | -3 
3 | DISP1 | VAL8 | 1  | 17 
1 | DISP1 | VAL1 | 1  | 14 
4 | DISP1 | VAL56 | 1  | 9 

一個簡單的ORDER BY ORD_COL1 DESC,ORD_COL2 DESC確實讓我我想要DISP_COL發生,但後來我想同樣的重視行遵循的順序。

我是一種新的oracle和pl/sql,所以所有的幫助表示讚賞。提前致謝。

+0

這樣有什麼錯'ORDER BY ORD_COL1 DESC,ORD_COL2 DESC'一遍嗎?它會產生與你的帖子完全相同的輸出。 – Quassnoi

+0

我很抱歉,我現在更改了表格值,以更好地反映我的問題。一個簡單的'ORDER BY ORD_COL1 DESC,ORD_COL2 DESC'會把PID:5放在PID之下:6 –

回答

0

下面的查詢工作(http://sqlfiddle.com/#!4/c340b/2/0

SELECT A1.* FROM (SELECT * FROM ABC) A1 INNER JOIN 
(SELECT DISP_COL, MAX(ORD_COL1) COL1, MAX(ORD_COL2) COL2 FROM ABC 
GROUP BY DISP_COL 
ORDER BY COL1 DESC, COL2 DESC) A2 ON (A1.DISP_COL = A2.DISP_COL) 
ORDER BY A2.COL1 DESC, A2.COL2 DESC, A2.DISP_COL, A1.ORD_COL1 DESC, 
A1.ORD_COL2 DESC; 
0

SELECT * FROM ABC ORDER BY ORD_COL1 DESC, DISP_COL ASC, ORD_COL2 DESC;

http://sqlfiddle.com/#!4/40401/18

您需要在ASCDISP_COL爲了得到你想要的結果訂購。查看更新的小提琴和上面的代碼。這會給你你想要的東西從你的問題。

+0

我想要的SQL查詢必須專門帶上那個負數,因爲它是DISP2值的一部分, ORD_COL1和ORD_COL2。感謝您的回答,雖然 –

+0

好的,看到上面更新的答案,我可以得到它與你想要的。 –

+0

它在這種情況下工作我想,但想象在同一張表中的一行數據: '7 | AISP1 | VAL7 | 2 | -3' 即使ORD_COL2的值低於PID:2的值,它仍然會成爲第一行,因爲'AISP'按字母順序高於'DISP'。 有什麼建議嗎? –

相關問題