MS ACCESS结合到结果集

时间:2014-04-16 09:06:47

标签: mysql sql

SELECT c.siteno, a.sitename, a.location, Count(a.status) AS ChargeablePermit

FROM (PermitStatus AS a LEFT JOIN states AS b ON a.status = b.statusheading) 
LEFT JOIN    Sitedetails AS c ON a.zone = c.compexzone
WHERE b.statusheading like "Chargeable"  and a.loaded_date between 
(select monthstart  from ChargeDate) and (select Monthend from ChargeDate)
GROUP BY a.sitename, c.siteno, a.location;

此查询返回网站的应付费许可证数量 Mar14

Siteno(1)Sitename(site1)位置(location1)Chargeablepermit(30)

这些计算基于两个子选择确定的时期(即3月14日) 我想知道我是否可以改变子选择所涵盖的日期范围(即4月14日)并对两个不同结果集中的计费许可计数进行数学计算(从另一个计算中减去一个计数)并将结果显示在在一张桌子上

例如,如果4月14日是

四月

Siteno(1)Sitename(Site1)位置(Location1)ChargeablePermit(40)差异(10)

1 个答案:

答案 0 :(得分:0)

与您提出的方式不同,您只需在UNION查询中将SQL加倍,以返回2个句点的数据集,然后对结果执行聚合:

SELECT SUM(CP) FROM (
  SELECT (ChargeablePermit * -1) AS CP FROM ... WHERE dates = Date1
  UNION ALL
  SELECT ChargeablePermit AS CP FROM ... WHERE dates = Date2
)

根据您处理的记录数量,这样的UNION可能会非常慢。所以另一种方法是将SQL转换为Append查询,将输出插入临时表。在运行第二个查询以聚合临时表的结果之前,您将为每个句点运行查询。

此外,您应该考虑使用联接来过滤结果而不是子查询。