Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 交叉表查询中的日期顺序-使用单独的表进行排序_Sql_Ms Access_Ms Access 2013_Crosstab_Ms Access 2016 - Fatal编程技术网

Sql 交叉表查询中的日期顺序-使用单独的表进行排序

Sql 交叉表查询中的日期顺序-使用单独的表进行排序,sql,ms-access,ms-access-2013,crosstab,ms-access-2016,Sql,Ms Access,Ms Access 2013,Crosstab,Ms Access 2016,对于列中的字段,我有一个带有“mmm-yyy”格式日期的交叉表查询 我使用了下面的设计来创建查询 我遇到的问题是,从12月17日到7月16日的日期没有按降序正确排序。这将是一个动态查询,每个月都会更改月份,因此我想使用一个额外的数据表来进行排序,而不是在属性窗口中输入月份名称列表 我将如何修复我的查询以使其执行此操作 感谢您的帮助不幸的是,不管联接表是如何排序的,crosstab默认情况下都会按字母顺序对列进行排序,因此Apr、Dec、。。。开始下单。若要更改甚至过滤交叉表中的列顺序,可以在SQ

对于列中的字段,我有一个带有“mmm-yyy”格式日期的交叉表查询

我使用了下面的设计来创建查询

我遇到的问题是,从12月17日到7月16日的日期没有按降序正确排序。这将是一个动态查询,每个月都会更改月份,因此我想使用一个额外的数据表来进行排序,而不是在属性窗口中输入月份名称列表

我将如何修复我的查询以使其执行此操作


感谢您的帮助

不幸的是,不管联接表是如何排序的,crosstab默认情况下都会按字母顺序对列进行排序,因此Apr、Dec、。。。开始下单。若要更改甚至过滤交叉表中的列顺序,可以在SQL语句的PIVOT Col in子句中指定值

由于需要动态查询,请考虑在VBA中创建QueDeDF,以更新交叉点后面的SQL,动态更新PIOT-COLIN子句。当然,根据需要或通过参数传递开始和结束日期:

公共子构建交叉表 dimdb作为数据库 Dim qdef作为QueryDef Dim strSQL作为字符串,日期作为字符串 Dim i为整数,monthsDiff为整数 Set db=CurrentDb '删除以前保存的查询 对于db.querydfs中的每个qdef 如果qdef.Name=AccuralsCrosstabQ,则 db.Execute DROP Table&qdef.Name,dbFailOnError 如果结束 下一个qdef “把所有的月份都倒回去 日期= monthsDiff=DateDiff,2016年7月1日,2016年12月1日 对于i=monthsDiff到0,步骤-1 日期=日期和格式日期地址,i,2016年7月1日,年月日和, 接下来我 日期=日期和 日期=替换日期,, '准备SQL字符串 strSQL=将SUMa.[Amount$]转换为sumaount\u &选择a.公司、a.[应计ID],SUMa.[金额$]作为[总金额$]\u &来自[应计原始数据]a\u &a.集团公司,a.[应计ID]_ &PIVOT Formata.[发布日期],mmm yyyy_ &输入日期(&D) '创建查询 设置qdef=db.createQueryDefacuralsCrossTabq,strSQL 设置qdef=Nothing Set db=Nothing 端接头
一个选项是使用能够正确排序的格式格式化日期,比如:yyyy-mm。谢谢Parfait,我现在就试试这个。