2015-03-31 15 views
0

我有一個簡單的查詢我的前老闆留給我。它使用的是不需要花費大量時間的情況(並且由於尚未確定的原因導致僅運行一個數據庫的服務器上的故障轉移)。我試圖改變它不存在,我得到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 

這可能是大多數小菜一碟,但我在這裏創下了磚牆。我會很感激任何幫助(我也準備任何對我的咆哮)。

謝謝! Diane

回答

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 

改變選擇列表中的子查詢,也別名的清晰度。

+0

不,內部查詢拉記錄,但所有的代碼合併帶來0行回來。不過,我很感激! – 2015-03-31 18:52:29

1

需要子查詢,因爲它以與第一個連接語句相同的方式連接數據。因爲它是數據不在子查詢中。我將你的子查詢的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

你知道,我開始懷疑原來不是在部分工作。你的代碼以及我所有的絆腳石都有不同的結果(但你的建議和我的嘗試都是一樣的)在總數上比原始代碼的答案要多。現在只是說服我的用戶,原件可能不正確。非常感謝你以不同的方式看待它! – 2015-03-31 19:22:03

相關問題