2013-04-07 1 views
2

QoQ에서는 nulls last을 사용할 수 없습니다. 오름차순 또는 내림차순 정렬 여부에 관계없이 마지막 값을 정렬하도록 coldfusion을 속일 수 있습니까?ColdFusion (Railo) QoQ - Nulls Last

내가 (라일로 실행) 쿼리의 SELECT 및 ORDER 부분에 케이스를 사용했지만, 그것을 좋아하지 않는 CF처럼 보이는 한

답변

4

이 더 좋은 옵션이 될 수 있지만 하나의 간단한 트릭은을 추가하는 것입니다 수 있습니다 정렬 우선 순위를 나타내는 열. Null이 아닌 값을 가진 레코드를 Null 값보다 높은 우선 순위로 할당하십시오. 그런 다음 우선 순위 값을 먼저 정렬 한 다음 원하는 다른 열로 정렬하면됩니다. Null 값은 우선 순위 번호가 낮기 때문에 항상 최후의 값으로 정렬됩니다.

<!--- 1 - non-null values 2 - null values ---> 
    SELECT 1 AS SortOrder, SomeColumn 
    FROM theQuery 
    WHERE SomeColumn IS NOT NULL 
    UNION ALL 
    SELECT 2 AS SortOrder, SomeColumn 
    FROM theQuery 
    WHERE SomeColumn IS NULL 
    ORDER BY SortOrder, SomeColumn ASC 

ColdFusion에서와 라일로 모두

+0

을 처리 할 것인지 잘 모르겠어요 그것을 QoQ가 아닌 db 쿼리에서 구현하는 것입니다. 아마도이 문제를 해결하는 방법 일 것입니다. – Daniel

+0

@ 대니얼 - 예, 소스가 db 쿼리 인 경우 추가 '합집합'과 QoQ를 피하면서 db 수준에서이 작업을 수행하는 것이 더 효율적입니다. – Leigh

+0

일반적으로 db 수준에서 이런 종류의 작업을하는 것이 더 효율적이지만, "최악의 작업"을 사용하면 때때로 더 나은 결과를 얻을 수 있습니다. –

2

대비가 매우 제한적인 SQL의 Vocab의가 (이. 당신은 아마 union 대신 order by를 사용하여 데이터베이스 쿼리에서 비슷한 일을 할 수있는 주목할 필요가있다), 그리고 아무것도 없다는 것을 null을 대조하는 방법을 다룹니다. 따라서 @Leigh가 제안한 것처럼, 원하는 정렬을 나타내는 다른 열을 널 (nulls)없이 추가하십시오.

또는 가능하면 DB에서이 모든 것을 처리하십시오. 분명히 이것은 항상 가능하지는 않습니다. (쿼리하는 레코드 세트가 처음에는 DB에서 왔을 수 없었기 때문에)

0

... 한 가지 더 길 밖에 없었지만 값이 NULL이고 비어 있지 않습니다. ''. 여기 메모리에서 갈 예정입니다. 그러나 이것은 본질적으로 ||을 사용하면 값이 null이 아닌 경우에만 작동하므로 Null 값을 사용하여 정렬 우선 순위를 내림으로써 끝에 값을 가져옵니다.

<cfquery> 
    SELECT *, '1' || #sortCol# as isNull 
    FROM table 
    ORDER BY isNull desc, #sortCol# 
</cfquery> 

실제로이의 사용을 옹호 아니에요 일부는 내가 두 가지 옵션까지라고 생각하고, 종료 후 CF가 같은 방법

관련 문제