2016-07-25 45 views
-1

我有以下使用兩個表的查詢。一個是聯繫人,另一個是電子郵件。聯繫人具有以下列:ContactId,FirstName,LastName。電子郵件包含以下列:EmailId,ContactId,EmailAddress。MS SQL - 在不更改記錄的情況下顯示姓氏和名字

我有這個查詢,運行一個基本的重複檢查。它將返回一個數字值和一個電子郵件(即2 - [email protected] = 2個聯繫人的電子郵件地址爲[email protected])。我試圖讓它顯示與電子郵件關聯的名字和姓氏,但是當我這樣做時,它會改變正在生成的數據量。這很可能是因爲它抓取了電子郵件,並且還附帶了姓和名。

下面是查詢;當我嘗試輸入SELECT CONTACT.LASTNAME和CONTACT。 FIRSTNAME以及GROUP BY,它將改變輸出的數據量;創建更多的列(預期),但也有更多的行,數據實際上不太相關(返回更多的空值)。這是什麼造成的,我該如何解決?

SELECT COUNT(CONTACT.CONTACTID) AS [DUPLICATECOUNT], EMAIL.ADDRESS AS [EMAILADDRESS] 
FROM CONTACT 
INNER JOIN EMAIL on EMAIL.ContactID = CONTACT.ContactId 
GROUP BY EMAIL.ADDRESS 
HAVING COUNT (CONTACT.ContactID) > 1 
ORDER BY [DUPLICATECOUNT] DESC 
+0

定義「變化的數據量正在生產」:更多的列(保證) ?更多的行(非常不可能)?如果前者,你還期望什麼?你想讓他們顯示爲單個列(想想「單元格」)嗎? –

+0

更多列,更少行 編輯:實際上更多的行,但技術上更少的數據(更多的空值顯示) –

+0

您的預期結果是什麼?如你所想,如果名稱不同,按這兩個字段分組將會影響計數 - 這將增加更多結果。你想把名字合併成一個列嗎? – sgeddes

回答

0

如果您的MS SQL Server是2008或更新版本,那麼您可以使用窗口函數來查找重複項。示例查詢看起來像這樣。

select c.firstname, c.lastname, e.emailaddress, 
     count(c.contactid) over(partition by e.emailaddress order by e.emailaddress) cnt 
from contact c 
    inner join email e on c.contactid = e.contactid 
order by cnt desc 
0

OK,你正試圖得到它的顯示名以及與電子郵件相關的姓氏:

select FirstName, LastName 
FROM CONTACT C WITH (NOLOCK), EMAIL E WITH (NOLOCK) 
where C.ContactID = E.ContactId 
AND EmailAddress='[email protected]' 
相關問題