0

我在单独的服务器上有两个视图,我将它们合并到一个视图中。

这是我的查询:

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
4

1 回答 1

1

我同意我之前的所有评论,但我应该指出的其他一点是使用“COLLATE DATABASE_DEFAULT”添加排序规则 - 很可能会导致速度变慢,特别是如果你的表相当大。请记住,它必须对返回的每一行执行此操作。

于 2013-01-30T06:22:10.263 回答