我正在使用SQL-Server Enterprise版本8.0。 我有這個查詢變得令人難以置信的複雜,不給我我需要的結果。查詢運行,但我沒有收到最新日期的結果。重複需要以及最新日期
到目前爲止,有三個主要問題。
基本上,我需要在數據庫中找到重複的名稱並識別它們的相關信息。最好是,我想將重複的名稱列和地址放在一起,以便可以比較它們出現在數據庫中的次數。所以,如果一個名字在數據庫中重複三次,我想要有一個C1名稱,C2名稱和C3名稱。
我也想加入其他表格,這樣我就可以獲得孩子的姓名以及客戶端最新活動(子查詢)等信息。
問題#1:自然連接不在此處與左外部連接結合使用。我需要使用工會嗎?
問題2:我正在嘗試獲取最近的活動。雖然Case.When獨自工作,當與查詢的其餘部分(減去左外連接)放在一起不會產生任何結果。理想情況下,我希望爲每個聯繫人返回最近的活動,選擇中的C1和C2。我使用了contactid,但也許這不是我應該使用的?
問題3:如果一個名字在數據庫中出現2次以上,我會在不同的行中爲他們提供各種組合。我怎樣才能讓他們在結果列表中顯示爲一行而不是多個組合?我需要添加C3嗎?有多達7個和8個重複的名稱..如何讓查詢變得更加麻煩?有沒有其他方法可以做到這一點?
爲了提供例子,我想的結果顯示爲這樣:
'的ContactID 1', '的ContactID 2', '3的ContactID', '姓', '名字',「聯繫人1地址','聯繫人2地址','聯繫人3地址','C1家庭電話和工作電話','C2家庭電話和工作電話', 'C3家庭電話和工作電話','C1兒童姓名' ,'C2兒童姓名','C3兒童姓名','C1最近活動','C2最近活動','C3最近活動'
我會將查詢簡化爲簡單,但在這一點上,我不知道該怎麼辦。原諒繁瑣的查詢和我感謝您抽出寶貴的時間:
SELECT DISTINCT (c1.contactid) as 'ContactID 1', (c2.contactid) as 'ContactID 2', c1.lastname as
'Last Name', c1.firstname as 'First Name',
(c1.address+' '+c1.city+', '+ c1.state +' '+ c1.postalcode) as 'Contact 1 Address',
(c2.address+' '+c2.city+', '+ c2.state +' '+ c2.postalcode) as 'Contact 2 Address',
(c1.homephone+' '+ c1.workphone) as 'C1 Home phone and Work phone',
(c2.homephone+' '+ c2.workphone) as 'C2 Home phone and Work phone',
(cg.childfirst+' ' +cg.childlast) as 'C1 Child''s Name',
(cv.childfirst+ ' '+cv.childlast) as 'C2 Child''s Name'
FROM contacts c1, contacts c2
WHERE (c1.child=0) and (c1.contactid<c2.contactid) and ((c1.lastname + c1.firstname)=
(c2.lastname + c2.firstname))
LEFT OUTER JOIN caregiverlabel cg on c1.contactid=cg.contactid,
contacts c2
LEFT OUTER JOIN caregiverlabel cv on c2.contactid=cv.contactid
AND c1.contactid IN
(SELECT max(MostRecentActivity)
FROM (select case
WHEN c1.modifieddate >= sl.starttime AND c1.modifieddate >= cl.createdate
AND c1.modifieddate >= pr.created AND c1.modifieddate >= pm.created THEN
c1.modifieddate
WHEN sl.starttime >= c1.modifieddate AND sl.starttime >= cl.createdate AND
sl.starttime >= pr.created AND sl.starttime >= pm.created THEN sl.starttime
WHEN cl.createdate >= c1.modifieddate AND cl.createdate >= sl.starttime AND
cl.createdate >= pr.created AND cl.createdate >= pm.created THEN
cl.createdate
WHEN pr.created >= c1.modifieddate AND pr.created >= sl.starttime AND
pr.created >= cl.createdate AND pr.created >= pm.created THEN pr.created
WHEN pm.created >= c1.modifieddate AND pm.created >= sl.starttime AND
pm.created >= cl.createdate AND pm.created >= pr.created THEN pm.created
ELSE c1.modifieddate
END AS MostRecentActivity
FROM contacts c1
left outer join serviceslabel sl on c1.contactid=sl.contactid
left outer join calls cl on c1.contactid=cl.contactid
left outer join procall pr on c1.contactid=pr.contactid
left outer join pmpcall pm on c1.contactid=pm.contactid
) AS date_query
)
order by c1.lastname, c1.firstname
如果通過標籤'sql'和'server',你的意思是'sql-server'嗎?如果是這樣,可以更新您的帖子您正在使用的SQL Server版本? – Thomas 2011-05-18 23:21:43
是的,它是SQL Server。我不知道爲什麼這些標籤是分開的,因爲我把它們寫在一起。我會嘗試編輯。 – WixLove 2011-05-18 23:28:00
SQL Server的版本如何? – Thomas 2011-05-18 23:30:18