주문

2015-01-21 5 views
-1
Create table #temp 
(
OrderDate datetime 
) 

insert into #temp values ('01/21/2015'),('01/20/2014'),('11/12/2013') 

select distinct convert(varchar(10),orderdate,101) as OrderDate from #temp 
order by convert(varchar(10),orderdate,101) asc 

위의 쿼리는 나에게 다음과 같은 결과를 제공합니다주문

OrderDate 
01/20/2014 
01/21/2015 
11/12/2013 

을하지만 결과 아래와 같이합니다 : 위의 그냥

OrderDate 
11/12/2013 
01/20/2014 
01/21/2015 

내가 형식을 정렬하려고하는 샘플 . 실제 쿼리에서 나는 구별 키워드를 사용해야하며 또한 매개 변수를 사용하여 select 문에서 동적으로 열이 올 것입니다.

내 실제 검색어에 group by을 (를) 사용할 수 없습니다.

도와주세요.

+3

datetime 값 대신 날짜의 문자열 표현으로 정렬합니다. –

답변

3

UPDATE

, 귀하의 의견에 나는 아직도 DATETIME 정렬 순서에 따라 정렬하는 동안 VARCHAR 101 표현으로 변환 하나의 열 orderdateUNIQUE 결과를 얻을 관리했습니다 유일한 방법이었다 참조 GROUP BY 절과 함께 약간의 해결 방법을 사용하여 :

SELECT 
    CONVERT(VARCHAR(10), A.OrderDate, 101) as orderdate 
FROM 
    #temp AS A 
GROUP BY 
    CONVERT(VARCHAR(10), A.OrderDate, 101) 
ORDER BY 
    MAX(A.OrderDate) ASC 

MAX(A.OrderDate)는 항상 당신에게 정확히 동일한 가치있는을 주어야한다 e를 모든 그룹의 가치에 맞춰서 부적절한 방법으로해서는 안됩니다. 다음 링크에 반복되는 작업 예제를 SQL Fiddle에 넣었습니다.

아직도 어쩌면 이전의 두 기둥이 솔루션은 도움이 발생하는 일이 일어날 : order by convert(varchar(10),orderdate,101)는 영숫자 정렬 순서를 발생하는 반면

select distinct 
    convert(varchar(10),orderdate,101) as OrderDateConverted, 
    orderdate 
from 
    #temp 
order by 
    orderdate asc 

위의 쿼리는 DATETIME 데이터 형식에 따라 쿼리 결과를 정렬합니다.

+0

위 응답이 예상대로 작동하지 않습니다. –

+0

예, 정말 죄송합니다. 이제 해결되었습니다. 'order by' 컬럼은 select 절 컬럼리스트에 있어야만하기 때문에 불행하게도 101 옵션을 가진 VARCHAR로 변환 된 컬럼의 이름이 바뀌는 반면에 추가되어야합니다. 지금은 적어도 당신의 문제를 해결하는데 약간 도움이되기를 바랍니다. –

+0

아니요. 제가 질문에 언급 한 것처럼 내가 테이블의 매개 변수에서 select 열을 동적으로 선택하는 쿼리를 언급 했으므로 위와 같이 할 수 없습니다. 같은 테이블에서 나는 Order에 의해 Column을 선택하므로 컬럼 구조는 by by 절에서도 동일 할 것입니다. –

0

다음과 같이 subQuery를 사용하여 문제를 해결할 수 있습니다.

SELECT t.OrderDate FROM (
SELECT distinct Convert(VARCHAR(10), orderdate, 101) AS OrderDate 
    from #temp) t 
order by  cast(t.OrderDate AS DATETIME) asc