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
以上只是我尝试按格式 101 进行排序的示例。在我的实际查询中,我需要使用 distinct 关键字,并且列将通过使用参数在select语句中动态生成。
我无法在实际查询中使用group by。
请帮忙。
答案 0 :(得分:3)
<强>更新强>
参考您的评论,我设法获得 UNIQUE 结果的唯一方法是,只有一列orderdate
转换为VARCHAR
101表示,同时仍根据DATETIME
排序顺序,使用了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)
应始终为您提供与每个组的值完全相同的值,因此它不应该是一种不正确的方式 - 我在上的以下链接中添加了一个重复的实例SQL Fiddle 即可。
仍然可能以前的双柱解决方案恰好有用:
select distinct
convert(varchar(10),orderdate,101) as OrderDateConverted,
orderdate
from
#temp
order by
orderdate asc
上述查询根据DATETIME
数据类型对查询结果进行排序,而order by convert(varchar(10),orderdate,101)
导致字母数字排序顺序。
答案 1 :(得分: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