2015-01-15 3 views
0

저는 열이있는 간단한 테이블을 가지고 있고 짝수 행에 대해 두 개의 경우와 홀수 행에 대해 두 개의 경우가있는 선택 사례를 사용하고자합니다. 예SELECT CASE SQL ORACLE ODDS

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

위한

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

은 가능한 행 번호 인 경우는 DO_ODD 것조차없는 경우이므로 상기 제 DO_EVEN 실행 new_table_row_is_even % 2처럼 배치하는 것입니다.

당신은 행을 계산하기 위해 row_number() 기능을 사용할 수 있습니다

매트

+0

"홀수 행"과 "짝수 행"은 어떻게 정의합니까? 특정 열의 값? –

+0

'do_even'및 'do_odd'- 기능은 무엇입니까? 절차. 다른 것? –

+0

특정 열 do_even 및 do_odd 그냥 할 일이 – Mat

답변

2

, 감사합니다. 관계형 데이터베이스의 행은 정렬되지 않으므로 안정적인 행 번호 매기기를 위해 일부 정렬 기준을 적용해야합니다. 위의 문장에서

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

+3

@Mat "* 행 순서 *"와 같은 것은 없다. 관계형 데이터베이스의 행은 정렬되지 않습니다 *** ***. 당신은 명령문을 실행할 때마다 다른 결과를 얻으면 불평하지 않습니다. –

+1

'ROW_NUMBER() OVER (ORDER BY rowid) '를 사용할 수 있지만'rowid' pseudocolumn의 값은 행이 삭제되고 다시 추가 된 경우 변경 될 수 있으며 행이 어떤 경우에도 삽입 된 것과 동일한 순서로 정렬되지는 않습니다. –