別々のサーバーに 2 つのビューがあり、それらを 1 つのビューに結合しています。
これは私のクエリです:
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 形式の月、およびカウントを持つ 2 つのテーブルがあります。ユーザーのカウントにアイテムがなかったため、いくつかの月が null になりました。そのため、月を作成し、そこに 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