我的前老板给我留下了一个简单的查询。它使用了一个非常长的时间(并且由于尚未确定的原因导致服务器上的故障转移仅运行一个数据库)。我试图将其更改为不存在,并且我返回了0条记录。我知道它必须是简单的东西,但这里绝对没有人知道我在说什么。
以下是查询:
declare @Callback table (ProspectRelationCode varchar(1), CallbackAvail int)
insert into @Callback
select
opp.ppc as ProspectRelationCode,
sum(case when dl.Category = 'Refusal'
then 1 else 0
end) as CallbackAvail
from CallResult cr
join Opportunity opp
on opp.id = cr.ID
join dbo.DispositionLookup dl
on dl.lookupkey = cr.CallStatus
where dl.Category = 'Refusal' and opp.Assignment not in (
select Assignment from CallResult cr
join Opportunity opp
on opp.id = cr.ID
where cr.CallStatus in ('VVOL','RVOL') )
and opp.listid >= 1400
group by opp.ppc
这是我的(轻微)返工:
select
opp.ppc as ProspectRelationCode,
sum(case when dl.Category = 'Refusal'
then 1 else 0
end) as CallbackAvail
from CallResult cr
join Opportunity opp
on opp.id = cr.ID
join dbo.DispositionLookup dl
on dl.lookupkey = cr.CallStatus
where dl.Category = 'Refusal' and not exists ( select opp.assignment
from CallResult cr join Opportunity on cr.id = opp.id
where cr.CallStatus in ('VVOL','RVOL') )
and opp.listid >= 1400
group by opp.ppc
对于大多数人来说,这可能是小菜一碟,但我在这里碰到了一堵砖墙。我感激任何帮助(我也准备好对我大吼大叫)。
谢谢! 戴安
答案 0 :(得分:1)
需要子查询,因为它以与第一个连接语句相同的方式连接数据。因为它是数据NOT IN子查询。我移动你的子查询的WHERE子句并像这样否定它:
DECLARE @Callback TABLE (
ProspectRelationCode VARCHAR(1)
,CallbackAvail INT
)
INSERT INTO @Callback
SELECT opp.ppc AS ProspectRelationCode
,sum(CASE
WHEN dl.Category = 'Refusal'
THEN 1
ELSE 0
END) AS CallbackAvail
FROM CallResult cr
INNER JOIN Opportunity opp ON opp.id = cr.ID
INNER JOIN dbo.DispositionLookup dl ON dl.lookupkey = cr.CallStatus
WHERE dl.Category = 'Refusal'
AND cr.CallStatus != 'VVOL'
AND cr.CallStatus != 'RVOL'
AND opp.listid >= 1400
GROUP BY opp.ppc
答案 1 :(得分:0)
这有用吗?
select
opp.ppc as ProspectRelationCode,
sum(case when dl.Category = 'Refusal'
then 1 else 0
end) as CallbackAvail
from CallResult cr
join Opportunity opp
on opp.id = cr.ID
join dbo.DispositionLookup dl
on dl.lookupkey = cr.CallStatus
where dl.Category = 'Refusal' and not exists ( select Opportunity.id
from CallResult cri join Opportunity on cri.id = opp.id
where cri.CallStatus in ('VVOL','RVOL') )
and opp.listid >= 1400
group by opp.ppc
更改了子查询中的选择列表,并且为了清晰起见也更改了别名。