我怎样才能得到从最新到最旧的日子

How can I get the days from latest to oldest

第一次使用类似的东西来寻求帮助,所以我不确定我这样做是否正确,但是这里...

我正在尝试让我的日期从最近到最旧。 当我尝试按 [Day] Desc 或 Asc 排序时,它显示不正确。

这是我当前显示的link

https://imgur.com/a/9P9hz

有人可以帮忙吗?

DECLARE @StartDate DATETIME = '2018/03/13'
DECLARE @NumDays INT = 11


DECLARE @cols AS NVARCHAR(MAX),
             @query  AS NVARCHAR(MAX),
             @query1  AS NVARCHAR(MAX),
             @query2  AS NVARCHAR(MAX),
             @query3 AS NVARCHAR(MAX),
             @query4 AS NVARCHAR(MAX),
             @query5 AS NVARCHAR(MAX) 



;with cte as (          
    SELECT 
    CAST(DAY(SentTime) AS VARCHAR(MAX)) [Day]
                 --,CAST((DATENAME(DAY, SentTime)) AS INT) as SentDay 
                 ,isnull(count(id),0) 'Total'
                 ,Sum(Case when isnull(IsDeleted,'') <> '' Then 1 else 0 end) Deleted
                 ,Sum(Case when isnull(CallLogTime,'') = '' and isnull(IsDeleted,'')=''  Then 1 else 0 end) 'Not Logged'
                ,Sum(Case when isnull(SentTime,'') = '' and isnull(IsDeleted,'')=''  Then 1 else 0 end) 'Received'
                 ,Sum(Case when isnull(CallLogTime,'') <> '' and isnull(IsDeleted,'')=''  Then 1 else 0 end) Logged

    FROM tblMailItems
    WHERE DATEDIFF(dd, SentTime, GETDATE()) <= @NumDays
    group by DAY(SentTime) --,CAST((DATENAME(DAY, SentTime)) AS INT) 

),
cte2 as (
    select * from cte
)

select * 
into #X
from cte
union
select 'Row Total', sum(Total), sum(Deleted), sum([not logged]), sum(Received), sum(Logged) from cte2

--drop table #X

select @cols = STUFF((SELECT ',' + QUOTENAME([Day]) 
                    from #X
                    group by DAY
                    order by DAY asc

                                   FOR XML PATH('')
            ), 1, 1, '')

                    --select * from #x 

set @query1 = 'select 1 Sequence, ''Total Logged'' [Description], ' + @cols + '
from 
(
  select [day], total
  from #X
) src
pivot
(
  sum(total)
  for Day in (' + @Cols + ')
) p'



set @query2 = ' UNION select 2 Sequence, ''Deleted'' [Description], ' + @cols + '

from 
(
  select [day], Deleted
  from #X
) src
pivot
(
  sum(Deleted)
  for Day in (' + @Cols + ')
) p'


Select  @query = @query1 + @query2



set @query3 = ' UNION select 3 Sequence, ''Not Logged'' [Description], ' + @cols + ' 
from 
(
  select [day], [Not Logged]
  from #X
) src
pivot
(
  sum([Not Logged])
  for Day in (' + @Cols + ')
) p'

select  @query = @query1 + @query2 + @query3


set @query4 = ' union select 4 sequence, ''Received'' [description], ' + @cols + ' 
from 
(
  select [day], [Received]
  from #x
) src
pivot
(
  sum([Received])
  for day in (' + @cols + ')
) p'

select  @query = @query1 + @query2 + @query3 + @query4


set @query5 = ' UNION select 5 Sequence, ''Logged'' [Description], ' + @cols + ' 
from 
(
  select [day], [Logged]
  from #X
) src
pivot
(
  sum([Logged])
  for Day in (' + @Cols + ')
) p'

select  @query = @query1 + @query2 + @query3 + @query5

execute  (@query)
drop table #x

您的 ORDER BY 列 [Day] 转换为 VARCHAR(MAX)。如果日期和时间采用 DATETIME 格式,则它们的排序效率最高。

如评论和答案中所述,在 date(time) 列上排序效率更高。不过我认为您的问题是,排序是在别名 DAY 上进行的,而不是在列 DAY 上进行的。尝试通过别名指定列:

SELECT ',' + QUOTENAME([Day]) 
from #X as x 
group by X.DAY 
order by x.DAY asc