2016-09-06 73 views
0

我想从两个子查询中减去结果,但我想返回多于1行,因为我想查看总调用以及它们在特定日期范围内的差异,下面的代码会给我一个错误:“子查询返回的值超过1个值,当子查询跟随=,!=,<,<,< =,>,> =或当子查询用作表达式“。希望你能帮助我。请注意,这是存储过程的一部分。先谢谢你。减去返回多于1行的两个SQL子查询的结果

SELECT distinct 

c.reporting as 'Agent_ID' 
,count(a.pkey) as 'Total_Calls_Handled' 
,a.MidnightStartDate as 'Call_Start_Time' 
,datename(dw,a.midnightstartdate) as 'Week_day' 
,a.[queue] 

into #temp3 
FROM t1 a 
join t2 b 
on a.FKAgent = b.fkagent 
join t3 c 
on a.agent = c.reporting 
where a.agent in (

    '132568' 
,'116308' 
,'132083' 
,'113737' 

) 

and convert(date, midnightstartdate) BETWEEN '08/29/16' AND '08/30/19' 
group by c.Reporting,a.MidnightStartDate,a.[queue] 


SELECT distinct b.[Week_Day], a.[Queue],[Total ACD Calls], [Total ACD Calls Handled], count([total_calls_handled]) as 'Total ACD Calls Handledby Agent', 

(select ((select [total acd calls handled] from #temp2) - 
(select count([total_calls_handled]) from #temp3))) as 'OperatorsCalls' 

INTO #Temp4 
FROM #Temp2 a 
JOIN #Temp3 b 
ON a.[Queue] = b.[Queue] 
GROUP BY [Total ACD Calls], [Total ACD Calls Handled], b.[Week_Day] , a.[Queue],[total_calls_handled] 
+0

你#TEMP2表可能包含的结果多行,而你在可以返回只有一个值的单个记录的上下文使用选择就可以了。 –

+0

是的,它有多行。如果日期范围只有1天,上面的代码可以正常工作。但我希望看到整个一周的差异让我们说。有什么方法可以做到吗? – Emarie

回答

0

这是我最好的一击,它没有一个工作的SQL小提琴,所以如果它不是现货道歉。基本上,您需要在加载数据之前创建临时表,执行计算(然后可以保持多行格式),然后将其加入最终的#temp4表中的最终插入。

SELECT distinct 

c.reporting as 'Agent_ID' 
,count(a.pkey) as 'Total_Calls_Handled' 
,a.MidnightStartDate as 'Call_Start_Time' 
,datename(dw,a.midnightstartdate) as 'Week_day' 
,a.[queue] 

into #temp3 
FROM t1 a 
join t2 b 
on a.FKAgent = b.fkagent 
join t3 c 
on a.agent = c.reporting 
where a.agent in (

'132568' 
,'116308' 
,'132083' 
,'113737' 

) 

and convert(date, midnightstartdate) BETWEEN '08/29/16' AND '08/30/19' 
group by c.Reporting,a.MidnightStartDate,a.[queue] 

--new temp table to load temp3 counts 
SELECT 
    Count(total_calls_handled) as total_calls_handled_count, 
    queue 
INTO #Temp3Counts 
FROM 
    #temp3 
GROUP BY queue, total_calls_handled 

-- new temp table to handled subquery calculations 
SELECT 
    T2.Queue, 
    (T2.[Total acd calls handled]-T3.total_calls_handled_count) as  'OperatorsCalls' 
INTO #temp2Calc 
FROM 
    #temp2 as T2 
INNER JOIN 
#temp3Counts as T3 
ON T2.Queue = T3.Queue 

GROUP BY T2.Queue,T2.[Total acd calls handled],T3.total_calls_handled_count 



SELECT distinct b.[Week_Day], a.[Queue],[Total ACD Calls], [Total ACD Calls  Handled], count([total_calls_handled]) as 'Total ACD Calls Handledby Agent',  T2C.OperatorsCalls 

INTO #Temp4 
FROM #Temp2 a 
JOIN #Temp3 b 
ON a.[Queue] = b.[Queue] 
INNER JOIN 
    #Temp2Calc as T2C 
ON T2C.queue = a.queue 
GROUP BY b.[Week_Day], a.queue,[Total ACD Calls],[Total ACD Calls Handled], [total_calls_handled],T2C.OperatorsCalls 
+0

谢谢。有效。 – Emarie

+0

如果你可以将它标记为答案,它可以帮助未来搜索潜在的人:) – Zi0n1

+0

我刚刚做到了。谢谢你提醒我。 :) – Emarie