2

以下に示すように、EmailQueueAttachmentsテーブルに1対多の関係を持つ親/子テーブルがあります。

ERD

親テーブル(EmailQueue)には、子テーブル(EmailQueueAttachments)に1つの行と2つの関連する行があり、単純な結合クエリを記述した後、次の結果が得られます。

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列を含む1つの行をcsvとして返す簡単な方法はありますか、それともストアドプロシージャを記述し、一時テーブルを使用してこれを実現する必要がありますか?

4

1 に答える 1

3

これにより、1つの列のパスがコンマ区切りのリストとして表示されます。

NB私はテストしなかったので、タイプミスがあるかもしれません。

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)
于 2012-07-10T14:49:00.147 に答える