需要ACCESS SQL Query

时间:2010-08-27 20:37:15

标签: ms-access

好吧,这个让我难过......主要是因为我一整天都在研究这个问题而我(和老板)决定选择另一条路线。然而,我的大脑是炒的。

我向您呈现以下图片:

alt text http://i.filmot.com/1ypzx.png

现在左手表是导出表(它不是物理表)。这就是我要的。 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

2 个答案:

答案 0 :(得分:1)

我为这个名为Counter的数字表使用了一个字段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;

答案 1 :(得分:0)

您可以通过在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

有关子查询的详细信息,请参阅:http://allenbrowne.com/subquery-01.html