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
这些计算基于两个子选择确定的时期(即3月14日) 我想知道我是否可以改变子选择所涵盖的日期范围(即4月14日)并对两个不同结果集中的计费许可计数进行数学计算(从另一个计算中减去一个计数)并将结果显示在在一张桌子上
例如,如果4月14日是四月
答案 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查询,将输出插入临时表。在运行第二个查询以聚合临时表的结果之前,您将为每个句点运行查询。
此外,您应该考虑使用联接来过滤结果而不是子查询。