2012-03-23 19 views
1

當我在一個參數加入我得到的結果:入世對多個參數

join 

SalesMapping m 

on 

(c.[MLIS Practice ID] = m.MLIS) 

然而,當我在2個參數加盟,我得到0的結果:

join 

SalesMapping m 

on 

(c.[MLIS Practice ID] = m.MLIS and ltrim(rtrim(c.[QuikLab Practice Code]))=ltrim(rtrim(m.[Practice Code]))) 

我檢查了我源表來檢查這個連接是否會產生任何結果,而且肯定會!

這裏是我的整個查詢:

select 
[rep name]=m.[Sales Rep], 
[css name]=m.[CSS Rep], 
m.[Practice Name], 
m.[Practice Code], 

[MLIS Code]=m.[MLIS], 
[Yesterday Volume]=(select 
        COUNT([accession id]) 
        from SpecimenCount 
        where [MLIS Practice ID]=m.[MLIS] 
        and [Date Received]=CAST(getdate()-2 as DATE)), 
[Today Volume] = (select 
        COUNT([accession id]) 
        from SpecimenCount 
        where [MLIS Practice ID]=m.[MLIS] 
        and [Date Received]=CAST(getdate()-1 as DATE)), 
[Rep Email]=m.[sales rep], 
[CSS Email]=m.[css rep], 
[Manager Email]=m.manager 

from 

SpecimenCount c 

join 

SalesMapping m 

on 

(c.[MLIS Practice ID] = m.MLIS and c.[quiklab practice code]=m.[practice code]) 

join 

ManagerNames 

on ManagerNames.Name = m.Manager 

爲什麼我的查詢返回0的結果(兩個條件加入)?

這裏是我以下的思維過程:

c.[MLIS Practice ID] = m.MLIS and c.[quiklab practice code]=m.[practice code] 

我們肯定可以加入兩個數據集,這是爲什麼:

+----------+----------+---------------+---------------+-----------------------+-----------+------------------+------------------+--------------+-----------+-----------+---------------+ 
| rep name | css name | Practice Name | Practice Code | quiklab practice code | MLIS Code | MLIS Practice ID | Yesterday Volume | Today Volume | Rep Email | CSS Email | Manager Email | 
+----------+----------+---------------+---------------+-----------------------+-----------+------------------+------------------+--------------+-----------+-----------+---------------+ 
| na  | na  | na   | SCPMA   | SCPMA     | 100004 |   100004 |    10 |   3 | na  | na  | na   | 
+----------+----------+---------------+---------------+-----------------------+-----------+------------------+------------------+--------------+-----------+-----------+---------------+ 

正如你所看到的代碼100004SCPMA是相同和應該加在一起

+0

'我檢查了我的源表以檢查這個連接是否會產生任何結果,而且肯定會!'顯然它*不會*,否則你會得到這些結果!是什麼讓你覺得它會呢?你能更詳細地解釋你的推理嗎?那麼我們可能會看到你錯在哪裏。 – 2012-03-23 18:41:01

+0

@MarkByers謝謝你。我提供了更多信息 – 2012-03-23 18:45:38

+0

「經理姓名」和「經理人」的信息在哪裏,如果其他聯合可以工作,但經理姓名不可以,那麼您的問題也可能在哪裏。 – jzworkman 2012-03-23 18:48:48

回答

1

好吧有可能你沒有空格,但有隱藏的,不可打印的字符(如TAB)?這會導致連接失敗。

2

所以你已經證實,有現有的MLIS和練習代碼,可以加入......但有真實在您加入經理人時也是第三種情況。我在你的樣本數據中沒有看到經理,但我願意打賭,沒有經理人符合mlis/practice代碼對。

一般來說,識別這種情況的簡單方法是逐個進行連接,並註釋掉或將其變爲左連接。一旦數據回來,你知道是什麼造成了這個問題。

+0

非常好的想法!我遺漏了最後加入經理,仍然得到0結果 – 2012-03-23 18:52:01

1

你能辨認連一排的存在,應該是在結果集中?你可以驗證你的表中的數據是?我遇到過這種麻煩最常見的方式是使用錯誤的名稱作爲列。哦,不要做局部鋸齒,它會給我帶來很多麻煩,最終也會給你帶來麻煩。 (別名ManagerNames)

首先,驗證是否有MangerName和SalesMapping之間的匹配上MangerName.Name=SalesMapping.Manager

select distinct Name from ManagerNames 

select distinct Name from ManagerNames 
except 
select distinct Manager from SalesMapping 

--get less rows with the second query. 

其次,驗證是否有SpecimenCount

select distinct [MLIS Practice ID],[quiklab practice code] from SpecimenCount 

select distinct [MLIS Practice ID],[quiklab practice code] from SpecimenCount 
except 
select MLIS,[practice code] from SalesMapping. 

--get less rows with the second query. 

之間的比賽是什麼,你可能會發現,是數據不匹配。然後你將不得不回到開發者手中,並獲得關於如何填充表的更多信息,以便可以匹配列。由於沒有人打擾使列名稱相同,我猜想匹配不會很簡單。

祝你好運。

+0

傑裏非常感謝你的幫助。在第一組查詢中,第二組返回0行,而在第二組查詢中,兩組返回的行數相等 – 2012-03-23 18:54:49