我在单独的服务器上有两个视图,我将它们合并到一个视图中。
这是我的查询:
SELECT *
FROM
(
SELECT v1.Name COLLATE DATABASE_DEFAULT as Name, v1.Year as Year
FROM AgentCallsByMonth v1
UNION
SELECT v2.Name as Name, v2.Year as Year
FROM BH1PCIMD01.eGActiveDB.dbo.AgentChatsByMonth v2
) as u CROSS APPLY (
SELECT
ISNULL(v1.[Month],v2.[Month]) as [Month],
ISNULL(v2.[Chats], 0) AS [Chats], ISNULL(v1.[Calls], 0) AS [Calls]
FROM master..spt_values v
LEFT JOIN AgentCallsByMonth v1 ON v.number = v1.[MM] AND v1.Name = u.Name and v1.Year=u.Year
LEFT JOIN BH1PCIMD01.eGActiveDB.dbo.AgentChatCountByMonth v2 ON v.number = v2.[MM] AND v2.Name = u.Name and v2.Year=u.Year
WHERE v.type = 'P' AND v.number < 12 and u.Year = 2012
) o
出于某种原因,这将永远持续下去。如果我单独从表中提取数据,则只需不到 30 秒。上述查询的最后一次运行是 24 分钟并且还在计数。
关于需要发生什么的一点背景。
我有两个表,它们有一个用户名、00-mon 格式的月份和一个计数。现在有些月份是空的,因为用户没有任何计数项目,因此它们不会填充。因此,我们正在创建月份并将 0 放入其中。但是,在另一张表中,他们可以计数一个月的某些项目,而在另一张表中却没有计数。
例如。
表格1
JoeUser 01-Jan 48
JoeUser 03-Mar 12
JoeUser 09-Sep 3
表 2
JoeUser 01-Jan 12
JoeUser 02-Feb 4
JoeUser 05-May 6
这是结果输出:
JoeUser 01-Jan 48 12
JoeUser 02-Feb 0 4
JoeUser 03-Mar 12 0
JoeUser 04-Apr 0 0
JoeUser 05-May 0 6
JoeUser 06-June 0 0
etc