首先说明:
1. 该SQL语句用于ACCESS执行。
1. 为表述清楚,SQL中的参数本来应该是“?”,我写成了英文begin和end表示开始时间和结束时间。
1. 问题:当单个执行FROM语句后每个SELECT语句时,可以查询出来数据。可是用LEFT JOIN后,查不出数据了。当把ON的条件放宽为“DT.时间 =AA.时间”或者“DT.车牌号 = AA.车牌号”时都有数据,但是这样做不符合检索要求。请各位同仁帮忙看看
SELECT DT.时间,DT.车牌号,
IIF(AA.燃油费 IS NULL, 0,AA.燃油费) AS 燃油费
FROM
(SELECT FORMAT(DATEADD('m',BS.NUM,begin),'yyyy年MM月') AS 时间,
BC.车牌号
FROM B_SYSDATE AS BS, B_车辆信息表 AS BC
WHERE BS.NUM <= DATEDIFF('m',begin,end) ) AS DT
LEFT JOIN
(SELECT FORMAT(A.交易时间,'yyyy年MM月') AS 时间 ,
SUM(A.金额) AS 燃油费,B.车牌号
FROM A_车辆充油明细 AS A ,B_车辆信息表 AS B
WHERE A.卡号 = B.油卡号 AND A.交易时间 BETWEEN begin AND end
GROUP BY FORMAT(A.交易时间,'yyyy年MM月'),A.卡号,
B.车牌号) AS AA
ON DT.时间 =AA.时间 AND DT.车牌号 = AA.车牌号
ORDER BY DT.车牌号,DT.时间
- 单独查的结果
- DT表记录
- 时间 车牌号
- 2015-01 A
- 2015-02 A
- 2015-03 A
- 2015-01 B
- 2015-02 B
2015-03 B
AA表记录
时间 车牌号 燃油费
2015-02 A 300
2015-02 B 500
我**预期的效果**是选择一个时间段,比如开始日期选择2015-01,结束日期选择2015-03,但是只有2月份有数据,因此查询出来的数据列表应该如下显示:
- 时间 车牌号 燃油费
- 2015-01 A 0
- 2015-02 A 300
- 2015-03 A 0
- 2015-01 B 0
- 2015-02 B 500
-
2015-03 B 0
但是使用JOIN查询后的实际记录集如下:
时间 车牌号 燃油费
2015-01 A 0
2015-02 A 0
2015-03 A 0
2015-01 B 0http://ask.csdn.net/#
2015-02 B 0
2015-03 B 0