2015-01-15 103 views
0

我有一個簡單的表與一列,我想使用兩種情況下一個偶數行和奇數行的選擇案例。SELECT CASE SQL ORACLE ODDS

SELECT CASE WHEN new_table_row_is_even THEN DO_EVEN..ELSE DO_ODD 
        END 
FROM new_table 

例如

table 
------- 
1300 
2400 
4000 
8000 
.. 

是否有可能把像new_table_row_is_even%2所以當行數爲偶數第一DO_EVEN執行,如果不是會DO_ODD。

謝謝

+0

你如何定義「奇數行」和「偶數行」?特定列中的值? – 2015-01-15 15:24:04

+0

什麼是「do_even」和「do_odd」 - 功能。程序。別的東西? – 2015-01-15 15:24:28

+0

有沒有特定的列do_even和do_odd它只是要做的 – Mat 2015-01-15 16:02:24

回答

2

可以使用row_number()函數來計算行數。關係數據庫中的行未排序,因此您需要應用某些排序條件才能獲得穩定的行數。

select some_column, 
     case 
     when mod(row_number() over (order by some_other_column), 2) = 0 then 'even' 
     else 'odd' 
     end 
from the_table 

在上面的語句,你需要有一個適當的列名,給你想要的,這樣分配行號有意義的順序更換order by some_other_column

+0

謝謝你的答案,它幾乎可以工作,我不想通過some_other_column命令,我需要正確的順序,我怎麼能沒有命令。我需要保持行的順序 – Mat 2015-01-15 15:36:55

+3

@Mat沒有「*行的順序*」這樣的事情。關係數據庫中的行不是***排序的。你可以省去'order by',但不要抱怨,如果每次運行語句時都得到不同的結果 – 2015-01-15 15:38:14

+1

可以使用'ROW_NUMBER()OVER(ORDER BY rowid)',但'rowid'僞列的值如果該行被刪除並重新添加,則可能會發生更改,並且不能保證按照與任何情況下插入的行相同的順序排序。 – 2015-01-15 17:18:32