【问题标题】:Changing the number of columns dynamically in SQL MS Access 2007在 SQL MS Access 2007 中动态更改列数
【发布时间】:2018-05-17 08:41:52
【问题描述】:

我是 SQL 初学者,正在使用 MS Access 2007 我正在尝试将多个列添加在一起,但查询中要包含的列数总是会发生变化。例如,我必须计算年初至今的预算,每次用户执行查询时,都会输入一个新日期,并且我有 Month1、Month2、Month3...Month 12 列。我对如何确定要在查询中包含多少列的运行时间感到困惑。 如果用户输入 8/31/2017 我必须选择 Month1、Month2、Month3、Month4、Month5(它们是会计年度月)

.

【问题讨论】:

  • 为什么要以宽格式存储数据?以长格式存储价值数据,只有 一个 月份列和财政年度和月份的指标。您的查询会容易得多。长格式在存储/检索效率、可维护性和可扩展性方面更好。
  • 我同意上述评论 - 使用长格式存储的数据,您可以编写一个交叉表查询,根据您的问题将其与可变列一起显示。
  • @Parfait 我无法控制数据表,我得到了必须处理的视图
  • 如果您收到这种格式的数据,它们是供电子表格使用的。但是 Access 不是电子表格,所以第一步按照@Parfait 的建议规范化数据,然后使用这些数据进行进一步处理。

标签: sql ms-access vba ms-access-2007 dynamic-sql


【解决方案1】:

这是一个可怕的想法!像这样存储您的日期。

QryYTD: 代码:

SELECT
    Sum(qryNet.Net) AS YTD
FROM
   qryNet
WHERE
   (((qryNet.OrderDate) Between DateSerial(Year(Date()),1,1) AND   Date()))

QryMTD: 代码:

SELECT
    Sum(qryNet.Net) AS MTD
FROM
   qryNet
WHERE
   (((qryNet.OrderDate) Between DateSerial(Year(Date()),Month(Date()),1) 
AND
   Date()));

QryWTD: 代码:

SELECT
    Sum(qryNet.Net) AS WTD
FROM
   qryNet
WHERE
   (((qryNet.OrderDate) Between DateAdd("d",-Weekday(Date()),Date()+2) 
AND
   Date()));

正如所写,qryWTD 使用当前星期一作为开始日期。

一旦这三个都工作了,您可以通过添加前面的每个查询并将 YTD、MTD 和 WTD 指定为查询的字段来创建包装查询。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-13
    • 1970-01-01
    相关资源
    最近更新 更多