Ms access 需要访问SQL查询

Ms access 需要访问SQL查询,ms-access,Ms Access,好吧,这件事把我难住了。。主要是因为我一整天都在研究这个问题,我和老板决定走另一条路。然而,我的大脑是油炸的 我向大家展示以下图片: 资料来源: 现在左侧的表是导出表,而不是物理表。这就是我想要的。右侧的5个表是数据的来源 我想要最近一个月+前11个月的数据。在某些情况下,如所示示例,只有一个月的数据。因此,对于前11个月,我**确实**希望12个月显示0作为计数条目。可能吗?请看最后我的手绘画 注意:请注意,左侧表格不是物理表格。它是SQL SELECT语句的结果 当前SQL语句如下所示。它

好吧,这件事把我难住了。。主要是因为我一整天都在研究这个问题,我和老板决定走另一条路。然而,我的大脑是油炸的

我向大家展示以下图片:

资料来源:

现在左侧的表是导出表,而不是物理表。这就是我想要的。右侧的5个表是数据的来源

我想要最近一个月+前11个月的数据。在某些情况下,如所示示例,只有一个月的数据。因此,对于前11个月,我**确实**希望12个月显示0作为计数条目。可能吗?请看最后我的手绘画

注意:请注意,左侧表格不是物理表格。它是SQL SELECT语句的结果

当前SQL语句如下所示。它抓住了所有东西,而不是12个月,它做了一个奇怪的连接,在我当前的示例中失败了:

SELECT A.month, A.count, B.count, C.count, D.count, E.count
FROM [table name] AS A, [table name]  AS B, [table name]  AS C, [table name]  AS D, [table name] AS E
WHERE B.month=A.month and C.month=A.month and D.month=A.month and E.month=A.month
ORDER BY A.month DESC;
我要画一幅我希望决赛是什么样子的图画

+=============================================================+
|  month    | A.count | B.count | C.count | D.count | E.count |
+-------------------------------------------------------------+
|2010-08-01      3           2       0          5        18   |
|2010-07-01      0           0       0          0         0   |
|2010-06-01      0           0       0          0         0   |
|2010-05-01      0           0       0          0         0   |
|2010-04-01      0           0       0          0         0   |
|2010-03-01      0           0       0          0         0   |
|2010-02-01      0           0       0          0         0   |
|2010-01-01      0           0       0          0         0   |
|2010-12-01      0           0       0          0         0   |
|2010-11-01      0           0       0          0         0   |
|2010-10-01      0           0       0          0         0   |

etc

您可以通过在SELECT中包含子查询来实现这一点

    SELECT MonthDate,
    (
      SELECT COUNT(*) FROM A WHERE A.Month = M.MonthDate
    ) [A.Count],
    (
      SELECT COUNT(*) FROM B WHERE B.Month = M.MonthDate
    ) [B.Count],
    (
      SELECT COUNT(*) FROM C WHERE C.Month = M.MonthDate
    ) [C.Count],
...
    FROM Months M

有关子查询的更多信息,请参阅:

您可以通过在选择中包含子查询来完成此操作

    SELECT MonthDate,
    (
      SELECT COUNT(*) FROM A WHERE A.Month = M.MonthDate
    ) [A.Count],
    (
      SELECT COUNT(*) FROM B WHERE B.Month = M.MonthDate
    ) [B.Count],
    (
      SELECT COUNT(*) FROM C WHERE C.Month = M.MonthDate
    ) [C.Count],
...
    FROM Months M

有关子查询的更多信息,请参阅:

我使用了一个数字表来表示这个被调用的计数器,其字段Num包含至少12个连续整数

SELECT x.Mnth, Nz([a].[Count],0) AS a, 
       Nz([b].[Count],0) AS b, Nz([c].[Count],0) AS c, 
       Nz([d].[Count],0) AS d, Nz([e].[Count],0) AS e
FROM (((((SELECT DateAdd("m",-[Num],#2010/7/1#) AS Mnth 
          FROM [Counter] WHERE Num<=12)  AS x 
LEFT JOIN a ON x.Mnth = a.month) 
LEFT JOIN b ON x.Mnth = b.month) 
LEFT JOIN c ON x.Mnth = c.month) 
LEFT JOIN e ON x.Mnth = e.month) 
LEFT JOIN d ON x.Mnth = d.month
ORDER BY a.Count DESC;

我为这个被调用的计数器使用了一个数字表,它的字段Num包含至少12个连续整数

SELECT x.Mnth, Nz([a].[Count],0) AS a, 
       Nz([b].[Count],0) AS b, Nz([c].[Count],0) AS c, 
       Nz([d].[Count],0) AS d, Nz([e].[Count],0) AS e
FROM (((((SELECT DateAdd("m",-[Num],#2010/7/1#) AS Mnth 
          FROM [Counter] WHERE Num<=12)  AS x 
LEFT JOIN a ON x.Mnth = a.month) 
LEFT JOIN b ON x.Mnth = b.month) 
LEFT JOIN c ON x.Mnth = c.month) 
LEFT JOIN e ON x.Mnth = e.month) 
LEFT JOIN d ON x.Mnth = d.month
ORDER BY a.Count DESC;

这会产生一个错误。你能选择吗。。作为“选择零件”中的一部分?或者这仅仅是针对FROM部分?我在Access中进行了测试,它对我有效。是否设置了计数器表?派生表的语法将取决于您的SQL模式。如果是SQL 92,则上述操作应该有效,但如果SQL 89是传统默认值,则需要从[SELECT…]中选择。作为化名,嗯?我使用的是遗留默认值。新西兰[a].[Count]绝对没有问题,0作为一个a,这就是我认为马斯菲尼克斯所问的,它已经为yonks在Access中发挥了作用。我甚至用Access 2000进行了测试。它并不完全是一个派生表,它依赖于一个计数器或包含整数的数字表来获取日期,因此与格式化没有太大区别。这样的表格对很多事情都非常有用,我相信你们都知道。这会产生一个错误。你能选择吗。。作为“选择零件”中的一部分?或者这仅仅是针对FROM部分?我在Access中进行了测试,它对我有效。是否设置了计数器表?派生表的语法将取决于您的SQL模式。如果是SQL 92,则上述操作应该有效,但如果SQL 89是传统默认值,则需要从[SELECT…]中选择。作为化名,嗯?我使用的是遗留默认值。新西兰[a].[Count]绝对没有问题,0作为一个a,这就是我认为马斯菲尼克斯所问的,它已经为yonks在Access中发挥了作用。我甚至用Access 2000进行了测试。它并不完全是一个派生表,它依赖于一个计数器或包含整数的数字表来获取日期,因此与格式化没有太大区别。这样的表格对任何事情都非常有用,他,他,很多事情,我相信你都知道。+1对于这个问题-我希望你的“大脑油炸”标准与我的不同,因为我对这篇文章的理解不那么连贯。+1对于这个问题-我希望你的“大脑油炸”标准与我的不同,因为我对这篇文章的理解不够连贯。