Sql 访问查询:按逻辑排序日期,而不是按字母排序

Sql 访问查询:按逻辑排序日期,而不是按字母排序,sql,ms-access,ms-access-2010,jet,Sql,Ms Access,Ms Access 2010,Jet,用于查询的SQL为: SELECT DISTINCTROW Format$([Client Accounting].[Closing Date],'mmmm') AS [Month], Count([Client Accounting].[Loan Number]) AS [DB Error #], Sum([Client Accounting].[Write Off]) AS [Write Off], Sum([Client Accounting].Refund) AS Refund FROM

用于查询的SQL为:

SELECT DISTINCTROW Format$([Client Accounting].[Closing Date],'mmmm') AS [Month], Count([Client Accounting].[Loan Number]) AS [DB Error #], Sum([Client Accounting].[Write Off]) AS [Write Off], Sum([Client Accounting].Refund) AS Refund
FROM [Client Accounting]
GROUP BY Format$([Client Accounting].[Closing Date],'mmmm'), Year([Client Accounting].[Closing Date])*12+DatePart('m',[Client Accounting].[Closing Date])-1
ORDER BY Format$([Client Accounting].[Closing Date],'mmmm'), Year([Client Accounting].[Closing Date])*12+DatePart('m',[Client Accounting].[Closing Date])-1;
数据表的结果如下:

上述月份为:12-14、1-15、2-15、3-15 查询分组/排序所依据的[截止日期]字段是格式为m/d/yyyy ex.12/1/2014或3/26/2015的日期/时间字段
如您所见,月份是按字母顺序排序的,而不是按逻辑排序的。是否有人可以建议我如何修改SQL,使查询按日期格式mm month以数字格式分组/排序,但在数据表/报表中以文本形式显示为mmmm month name。

将每月第一天的字段表达式添加到SELECT list和GROUP by子句中

DateSerialYear[截止日期],Month[截止日期],1作为开始月份 然后您可以按该计算字段排序

如果不希望该字段出现在查询输出中,则可以在子查询中使用该字段。然后,计算字段可以用于ORDER BY,但可以从父查询的选择列表中排除

选择 次月, sub.[DB错误], 分[注销], 次级退款 从…起 选择 DateSerialYearca.[截止日期],Monthca.[截止日期],1作为开始月份, 格式$ca[截止日期],'mmmm'为[月份], Countca。[贷款编号]为[DB错误], Sumca。[注销]作为[注销], Sumca.退款作为退款 来自[客户会计]作为ca 分组 DateSerialYearca.[截止日期],Monthca.[截止日期],1, 格式$ca[截止日期],'mmmm' 作为子 按次月开始的订单; 注:

DISTINCTROW在GROUP BY查询中没有用处,因为查询的输出行在定义上已经是唯一的。 您可以使用另一个格式表达式,而不是我建议的DateSerial表达式,例如Formatca。[截止日期],yyyymm作为YearMonth
如果您的原始查询除了排序之外还能工作,那么您所需要的只是按月份进行分组:

SELECT 
    Format([Client Accounting].[Closing Date],'mmmm') AS [Month], 
    Count([Client Accounting].[Loan Number]) AS [DB Error #], 
    Sum([Client Accounting].[Write Off]) AS [Write Off], 
    Sum([Client Accounting].Refund) AS Refund
FROM 
    [Client Accounting]
GROUP BY 
    DateSerial(Year([Client Accounting].[Closing Date]), Month([Client Accounting].[Closing Date], 1),
    Format([Client Accounting].[Closing Date],'mmmm')

不客气。那一年约[截止日期]*12+日期约[截止日期]-1令我困惑。但既然你似乎对它给你的东西很满意,我想如果我不理解它,我们会没事的-那不是我手工输入的东西。我最初使用查询向导创建查询,它是作为GROUPBY语句的一部分自动生成的。我同样感到困惑:啊哈!在这种情况下,如果您移除了那个阻碍查询的部分,查询是否正常工作?我怀疑它没有用。好的,我将从我的答案中删除那个令人困惑的部分。如果您想通过HAVING子句对[Convertive]进行评估,则必须根据该子句进行分组。但我不确定这是否必要。您可以在WHERE子句中包含该条件,这与您在注释中描述的方式非常相似:WHERE ca.[争议]=true这就是我的意思,doh!谢谢顺便说一下,您的代码在开始月份后缺少一个逗号。