MS Access SQL 转换对枢轴值的聚合操作
Posted
技术标签:
【中文标题】MS Access SQL 转换对枢轴值的聚合操作【英文标题】:MS Access SQL Transform Aggregate Manipluation of Values for Pivot 【发布时间】:2014-12-30 18:05:13 【问题描述】:我一直在阅读并深入研究 SQL,我想我现在成功地对此感到困惑。我有一个示例表:
Date Quantity Type Date_Entered
01/02/15 23 Orange 10/01/15
01/02/15 10 Red 10/01/15
01/02/15 18 Yellow 10/01/15
02/02/15 15 Yellow 10/01/15
02/02/15 19 Red 10/01/15
. . . .
. . . .
Date 是预计销售的日历日期,Quantity 是销售数量,Type 是产品的类型(这可能会因类型数量而异),Date_Entered 是数据放入表格并给出的日期其他列的预测。对于每个 Date_Entered,都有一个日期范围(比如整个 2015 年)。对于每个日期,都有可用的每种类型。
现在,我一直在尝试使用 MS Access 中的 SQL 查询对表进行透视(因为我在 Excel 中将其与宏一起使用)以获得如下表:
Date Orange Red Yellow
01/02/15 3 2 5
02/02/15 0 -2 -1
03/02/15 8 -1 2
. . . .
. . . .
其中值是特定日期的销售数量从一个 Date_Entered 到另一个日期之间的差异(例如,一周、一个月、季度的预计销售额变化)。
到目前为止,我已经进化了以下内容:
TRANSFORM IIF(FIRST([Date_Entered]) > LAST([Date_Entered]),
FIRST([Quantity]) - LAST([Quantity]),
LAST([Quantity]) - FIRST([Quantity]))
SELECT [Date] FROM Sales WHERE [Date_Entered] = #2015-01-10# OR #2015-01-20#
GROUP BY [Date] ORDER BY [Date] PIVOT [Type]"
然而,FIRST() 似乎只是带出零,所以上面没有给出正确的数字。我认为,我的问题是计算出计算表值所需的聚合。希望有人能指出我正确的方向。
感谢您的任何回复。
【问题讨论】:
【参考方案1】:我认为问题出在您的 WHERE 子句上。而不是
WHERE [Date_Entered] = #2015-01-10# OR #2015-01-20#
试试
WHERE [Date_Entered] IN( #2015-01-10#, #2015-01-20# )
【讨论】:
刚刚测试了这个,哇!谢谢!我已经为此苦苦挣扎了一段时间。为什么日期不接受“OR”?作为一个附带问题,字段名称是否可以包含在返回查询中? 很高兴我能帮上忙。并不是 Date 不接受 OR,而是正如它所写的那样,Access 将其解释为布尔值,例如。 #2015-01-20# 错误。如果您在表达式中包含 [Date_Entered] ([Date_Entered] = #2015-01-20#,那么您将得到与使用 IN 子句相同的结果。 啊,好吧 - 现在更有意义了。以上是关于MS Access SQL 转换对枢轴值的聚合操作的主要内容,如果未能解决你的问题,请参考以下文章