2014-01-09 4 views
0

에 의해 결정되는 필드를 사용하여 특정 순서에 의해 주문하는 I가 다음 쿼리 (질문에 대한 단순화 된 버전)방법 case 문

내가 (WN을 특정 순서로 결과를 정렬 할
select case when pool_type in ('WN','PL','SH','EX','QN') 
    then pool_type else 'Other' end as pooltype, 
sum(wagered) 
from wageringactivitytable 
group by case when pool_type in ('WN','PL','SH','EX','QN') 
then pool_type else 'Other' end 

, PL, SH, EX, QN, 기타) SQL 쿼리를 작성한 방법을 고려할 때 이것이 가능한 것입니까?

또 다른 case 문을 사용하여 시도했는데 ('WN'의 경우 'case'pool_type, '2'등의 'PL'의 경우 1), pool_type이 order by 절에서 올바르지 않기 때문에 작동하지 않습니다. 이 .... agregate 함수 나 GROUP BY 절에 포함되지 않습니다 둘 때문에

가 나는 이름입니다보다는 열 위치로 다스 려 시도하지만,이 경우 순서는 완전히 .. 무시

case 1 when 'WN' then 1 
when 'PL'then 2 
.... 

when 'Other' then 6 

end 

답변

1

이렇게하려면 외부 쿼리를 사용하는 것이 좋습니다.

SELECT * 
FROM (
    select case when pool_type in ('WN','PL','SH','EX','QN') 
     then pool_type else 'Other' end as pooltype, 
    sum(wagered) 
    from wageringactivitytable 
    group by case when pool_type in ('WN','PL','SH','EX','QN') 
    then pool_type else 'Other' end 
) T 
ORDER BY 
    CASE WHEN pooltype = 'WN' THEN 1 
     WHEN ... 
    END 

이 작업을 수행하는 또 다른 방법은 예를 들면 ... 도우미 테이블을 만들 것입니다

다음
pooltypeorderer 
pooltype poolorder 
WN  1 
PL  2 
etc 

당신이 pool_type 및 pool_order 모두 해당 테이블과 그룹에 가입하기 때문에

나는이 두 번째 옵션을 좋아한다 유지 관리가 쉽기 때문에 코드를 변경하지 않고 순서를 변경하거나 새로운 유형을 추가 할 수 있습니다. 쿼리를 좀 더 복잡하게 보이게 만듭니다 (추가 조인이 있으므로).

+0

이 옵션에 대해 생각했습니다. 나는이 일을 끝낼지도 모른다. (어떤 경우에 나는 대답을 수락 할 것이다) – MrVimes

+0

@MrVimes - 옵션 2를 보라! : D – Hogan

+0

감사합니다. 나는 옵션 2를 보았습니다. 즉각적인 목적을 위해 옵션 1을 사용했지만, 유지 보수가 용이하도록 옵션 2로 변경하는 것을 고려할 것입니다. – MrVimes