好吧,这个让我难过......主要是因为我一整天都在研究这个问题而我(和老板)决定选择另一条路线。然而,我的大脑是炒的。
我向您呈现以下图片:
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
答案 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