我需要创建一个销售&委员会的报告总结报告范围
基本上它去(请原谅SaleDate表的blatent疯狂,但我简化了业务逻辑,并在现实中,它其实是有道理的这样)
SELECT agentName,
SUM(sales.Amount) AS Gross,
SUM(sales.Amount * sales.Commission) AS Commission
FROM agent
INNER JOIN sales ON agent.agentId = sales.agentId
WHERE sales.saleId IN (SELECT saleId FROM saleDate WHERE saleDate.myDate BETWEEN @minDate AND @maxDate)
GROUP BY agentName
所以这个查询工作绝对好。当我需要添加第二个日期范围时,会出现问题。
IE浏览器,他们想在2007年的销售比较&并肩销售。
我现在有基本相同的查询,但我已经添加别名销售表,并添加另一个
SELECT agentName,
SUM(sales1.Amount) AS Gross1,
SUM(sales1.Amount * sales1.Commission) AS Commission1,
SUM(sales2.Amount) AS Gross2,
SUM(sales2.Amount * sales2.Commission) AS Commission2,
SUM(sales3.Amount) AS Gross3,
SUM(sales3.Amount * sales3.Commission) AS Commission3
FROM agent
INNER JOIN sales1 ON agent.agentId = sales1.agentId
INNER JOIN sales2 ON agent.agentId = sales2.agentId
INNER JOIN sales3 ON agent.agentId = sales3.agentId
WHERE sales1.saleId IN (SELECT saleId FROM saleDate WHERE saleDate.myDate BETWEEN @minDate1 AND @maxDate1) OR
sales2.saleId IN (SELECT saleId FROM saleDate WHERE saleDate.myDate BETWEEN @minDate2 AND @maxDate2) OR
sales3.saleId IN (SELECT saleId FROM saleDate WHERE saleDate.myDate BETWEEN @minDate3 AND @maxDate3)
GROUP BY agentName
此查询但永远走(前20分钟,我取消了),在原来不到一秒钟,如果我只使用两个组,则需要9秒。
有关如何改善此性能的任何想法?
我愿意改变这个查询的设计。
我结束了使用UNION(需要不到一秒的时间了),我做了一个SELECT AGENTNAME,Gross1,Commission1,NULL,NULL,NULL,NULL FROM。 .. UNION SELECT agentName,NULL,NULL,Gross2,Commission2,NULL,NULL FROM ... 然后做了一个选择从那些和分组和总结 – 2009-09-25 18:52:04