2012-07-10 89 views
1

我有一個父/子表,如下所示,EmailQueueAttachments表上有一對多關係。子表結果串聯

ERD

父表(EmailQueue)有一個行和子表(EmailQueueAttachments),寫一個簡單的連接查詢,我得到了下面的結果後,兩個相關的行。

SELECT  EmailQueue.ID, EmailQueue.SenderAddress, EmailQueue.RecipientList, EmailQueue.CCList, EmailQueue.Subject, EmailQueue.Body, EmailQueue.BodyHTML, 
         EmailQueue.DisclaimerFooter, EmailQueue.Sent, EmailQueue.SendError, EmailQueue.CreatedDate,EmailQueueAttachments.AttachmentPath 
FROM   EmailQueue LEFT OUTER JOIN 
         EmailQueueAttachments ON EmailQueue.ID = EmailQueueAttachments.EmailQueueID 
WHERE  (EmailQueue.Sent = 0) AND (EmailQueue.SendError = 0) AND (EmailQueue.BodyHTML IS NULL) 

4 xxxxxxx xxxxxxx xxxxxxx xxxxxxx xxxxxxx NULL xxxxxxx 0 0 10/07/2012 11:58 \\server\orange.png 
4 xxxxxxx xxxxxxx xxxxxxx xxxxxxx xxxxxxx NULL xxxxxxx 0 0 10/07/2012 11:58 \\server\pear.png 

有沒有一種簡單的方法來與AttachmentPath列從子表中返回一個行作爲一個CSV或做我需要寫一個存儲過程和使用臨時表來實現這一目標?

回答

1

這應該爲您提供一列中的路徑作爲逗號分隔列表。

N.B.我沒有測試,所以可能會出現拼寫錯誤。

SELECT EmailQueue.ID, EmailQueue.SenderAddress, EmailQueue.RecipientList, 
     EmailQueue.CCList, EmailQueue.Subject, EmailQueue.Body, EmailQueue.BodyHTML, 
     EmailQueue.DisclaimerFooter, EmailQueue.Sent, EmailQueue.SendError, 
     EmailQueue.CreatedDate, 
     substring((SELECT (', ' + EQA.AttachmentPath) 
          FROM EmailQueueAttachments EQA 
          WHERE EmailQueue.ID = EQA.EmailQueueID 
          FOR XML PATH('') 
         ), 3, 1000) as [Path List] 
FROM EmailQueue 
WHERE 
    (EmailQueue.Sent = 0) AND (EmailQueue.SendError = 0) AND (EmailQueue.BodyHTML IS NULL) 
+0

不錯的一個霍根。作品一種享受 – 2012-07-10 15:02:11