2015-01-15 67 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