2011-11-07 23 views
0
SELECT col2,col3 FROM (
    select * from (
       select * from A 
       MINUS 
       select * from A where col3 LIKE '63%' 
      ) ORDER BY CASE WHEN col3 like '63%' THEN 2 ELSE 1 END 
     )  

這使輸出行作爲,排序查詢輸出基於所述數據除法

 col1 col2 col3 
     ---- ---- ---- 

1.  x  b  123 
2.  a  y  247 
3.  n  m  634 
4.  l  o  639 

基本上輸出分爲兩個部分,顯示部分COL3不喜歡 '63% '(第一行和第二行)和col3 like '63%'(行3和4)

現在我需要按col1對每個零件進行排序。即排序行1和2和行3和4。所以輸出應該是,

 col1 col2 col3 
     ---- ---- ---- 

1.  a  y  247 
2.  x  b  123 
3.  l  o  639 
4.  n  m  634 

有人幫我應該添加到查詢些什麼?

編輯:好吧,我不知道和清楚這一點的想法,但確實在GROUP BY是幫助FUL在這種情況下

感謝

+0

等待,但你排除'63%」從結果來看,所以對這個價值進行排序並沒有多大意義。此外,在查詢我想你想col3而不是col1 –

回答

1

您可以通過任何一組表達式的命令。通過將它們分開「」

SELECT col2,col3 
    FROM a 
ORDER BY (CASE WHEN col1 like '63%' THEN 2 ELSE 1 END), col1 
+0

謝謝 - 簡單而強大的:)。 – droidsites

+0

有時大腦在修復時會變得愚蠢:-) – droidsites

+0

@droidsites:不客氣)。但是,考慮編輯你的問題,所以對於有同樣問題的其他人更有幫助(參見OP的評論) –

0

嗯,我不知道如果我

SELECT col2,col3 
    FROM (select * 
      from (select * from A 
        MINUS 
        select * from A where col1 LIKE '63%' 
       ) 
      ORDER BY CASE WHEN col1 like '63%' THEN 2 ELSE 1 END 
     ) 

能給你這樣的結果:

 col1 col2 col3 
    ---- ---- ---- 

1.  x  b  123 
2.  a  y  247 
3.  n  m  634 
4.  l  o  639 

正如原查詢的輸出僅兩列(select col2,col3 from)。

,且查詢可以簡化一點,像

SELECT col1, col2, col3 
    FROM A 
WHERE col1 NOT LIKE '63%'      
ORDER BY CASE WHEN col3 like '63%' THEN 2 ELSE 1 END 

現在,您可以追加另一條規則ORDER BY

SELECT col1, col2, col3 
    FROM A 
WHERE col1 NOT LIKE '63%'      
ORDER BY CASE WHEN col3 like '63%' THEN 2 ELSE 1 END, col1 

HTH