2010-07-12 4 views
3

저는 Android 애플리케이션에서 SQLite를 사용하고 있습니다.
내 테이블 모두에는 해당 테이블의 기본값을 보유하는 0의 인덱스가있는 기본 행이 있습니다.
대부분의 경우 각 필드의 기본 숫자는 0이며 사용하는 데 가장 적합한 숫자입니다.
그러나 ORDER BY 문을 사용하여 데이터를 정렬 할 때 일반적으로 비어 있고 기본 정보를 사용하므로 모든 제로 값 필드를 목록 끝에 넣고 싶습니다.
정보를 정렬하려고 할 때 where 문에서 이러한 필드를 제외하고 필터링하지 않습니다. 여기 0을 오름차순 목록의 마지막에 표시하십시오.

내가 지금까지 가지고 무엇을 : 내 샌드 박스 데이터베이스에서

select distinct item.name, epoch_date.epoch 
from epoch_date, time 
where (time.begin_date_id = epoch_date._id) 
and (item.time_id = time._id) 
order by epoch_date.epoch; 

,이 같은 반환

"item 1", 0 
"item 2", 0 
"item 4", 0 
. 
. 
. 
"item 3", 1275350400 
"item 42", 1275472800 
"item 12", 1275472800 

을하지만 내가 원하는 것은 :

"item 3", 1275350400 
"item 42", 1275472800 
"item 12", 1275476400 
. 
. 
. 
"item 1", 0 
"item 2", 0 
"item 4", 0 

답변

10
CASE 문 제안에 해당합니다

,, 짧은 :

ORDER BY epoch_date.epoch == 0, epoch_date.epoch 
+0

더 짧은 것이 좋습니다. 잘됐다. 감사. – leetheguy

0

내가 ' SQLite가 case by 문을 "order by"할 수 있는지 완전히 확신 할 수는 없지만, 다음 줄을 따라 무언가를 시도하십시오 :

order by case epoch_date.epoch when 0 then 999999 else epoch_date.epoch end 
0

필터로 작동하는 추가 열을 추가 한 다음 두 열을 기준으로 정렬 할 수 있습니까?

select (...)epoch_date.epoch, case epoch_date.epoch when 0 then 1 else 0 as default 
(...) 
order by default,epoch_date.epoch 
4

이 시도 :

ORDER BY 
    CASE epoch_date.epoch WHEN 0 THEN 1 ELSE 0 END, 
    epoch_date.epoch 

내가 SQLite는 테스트 그러나 많은 다른 데이터베이스에서 작동하지 그래서 희망 너무 SQLite는에서 작동합니다.

+0

매력처럼 작동했습니다. 감사합니다. . – leetheguy

0

디코딩하여 순서 (epoch_date.epoch, 0, NULL, epoch_date.epoch)

당신이 뭔가를 사용할 수 있습니다 이 ... 때문에 오름차순의 경우 nulls가 끝에 보관됩니다. 당신은 decode 함수를 sqlite에서 사용할 수있다. 그렇지 않으면 그냥 대신 case 문을 사용할 수있다.

라비 쿠마르

관련 문제