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