【发布时间】:2014-11-19 16:13:45
【问题描述】:
我已经处理这个查询超过一天了。
从下面第一个查询 (Calls) 中的 Total 列中,我只需将第二个表 (CallsIncrease) 中的 Amount 数字添加或减去日期范围内的月份(从 StartDate 到 EndDate,其中技能等于查询技巧)。
我尝试先创建一个字段,其中包含每个月要减去的金额,然后使用它从总数中减去。
我尝试了以下子查询的不同版本:
Expr1: (
select amount
from (
SELECT CallsIncrease.Skill, Sum(CallsIncrease.Amount) AS Amount
FROM CallsIncrease
GROUP BY CallsIncrease.Skill
)
where [skill]=(select [skill] from CallsIncrease)
And [callmonth] Between (select [startdate] from CallsIncrease)
And (select [enddate] from CallsIncrease)
)
Expr1: (
SELECT Sum([%$##@_Alias].amount) AS SumOfamount
FROM (
SELECT CallsIncrease.Skill, Sum(CallsIncrease.Amount) AS Amount
FROM CallsIncrease
GROUP BY CallsIncrease.Skill) AS [%$##@_Alias]
GROUP BY [%$##@_Alias].skill
HAVING ((([%$##@_Alias].skill)=forecast.skill))
)
调用查询的 SQL:
SELECT
CDate(DateSerial(Year([ForecastDate]),Month([ForecastDate]),1)) AS ForecastMonth,
Forecast.Skill,
Sum(Forecast.NormalizedData) AS Total
FROM Forecast
GROUP BY CDate(DateSerial(Year([ForecastDate]),Month([ForecastDate]),1)),
Forecast.Skill
HAVING (((Sum(Forecast.NormalizedData)) Is Not Null));
来电查询:
ForecastMonth Skill Total
01-Jan-08 Generalist English 56541
01-Jan-08 Generalist Spanish 868
01-Jan-08 Public Safety English 26837
01-Jan-08 Public Safety Spanish 401
01-Jan-08 Total 34584
01-Jan-08 Utilities English 48332
01-Jan-08 Utilities Spanish 1605
01-Feb-08 Generalist English 52176
来电增加表:
ID EventID Skill StartDate EndDate Amount
1 9/5/2008 Generalist English 01-Jan-08 31-Aug-08 1800
3 7/10/2010 Generalist English 01-Jan-08 30-Jun-10 -3000
4 12/1/2011 Generalist English 01-Jan-08 30-Nov-11 2500
5 3/1/2013 Generalist English 01-Jan-08 28-Feb-13 200
6 12/1/2011 Generalist Spanish 01-Jan-08 30-Nov-11 80
7 7/1/2010 Public Safety Eng 01-Jan-08 30-Jun-10 -4700
8 3/10/2009 Utilities English 01-Jan-08 28-Feb-09 7000
我真的希望这一切都有意义,任何帮助将不胜感激。
【问题讨论】:
-
您使用的是什么关系型数据库?这是 MS Access 吗?
-
是的,它是 MS Access。