2

MSSQL Server 2012 に 2 つのテーブルがあり、それらを 1 つの新しいテーブルに結合したいと考えています。これらは列 messageID によってリンクされています。最初のテーブル ( Message ) には

messageID
sender
date

2 番目のテーブル ( recipientInfo ) には

messageID
recipient

主な問題は、Messageでは messageID が主キーであり、したがって一意であることです。recipientInfoでは、messageID は一意ではありません (1 つのメッセージに複数の受信者が含まれる可能性があるため)。どちらかを備えた新しいテーブルが欲しい

  • メッセージごとに 1 行、受信者を 1 列に連結
  • 複数の受信者がいる場合 (行ごとに 1 つの受信者)、メッセージごとに複数の行
4

5 に答える 5

4

おそらく次のようなものです(MSSQL 2005以降を使用している場合):

CREATE TABLE NewTable
(
    messageID INT,
    sender VARCHAR(100),
    recipient VARCHAR(MAX),
    date DATETIME
)
INSERT INTO NewTable(messageID,sender,recipient,date)
SELECT
    [Message].messageID,
    [Message].sender,
    STUFF
    (
        (
            SELECT 
                ',' +recipient
            FROM
                recipientInfo
            WHERE
                recipientInfo.messageID=[Message].messageID
            FOR XML PATH('')
        )
    ,1,1,'') AS recipient,
    [Message].date
FROM
    [Message]
于 2012-04-24T09:12:19.073 に答える
1

ビューを作成し、そこに既存のテーブルを残しますか? それとも、2 つのテーブルを永続的に結合しますか?

SELECT m.messageID, m.sender, m.date, r.recipient
INTO New_Table
FROM Message m LEFT OUTER JOIN
recipientinfo r on m.messageID = r.messageID
于 2012-04-24T09:06:00.213 に答える
0

ここでスペルを整理する必要があるかもしれません

  select sender,date,( select recipient+chr(10) from receipientInfo as r where r.messageid = m.messageid order by r.recipient FOR XML PATH ('')) as receipents from message as m
于 2012-04-24T09:22:42.010 に答える
0
select msg.messageID, msg.sender, rep.recipient, msg.date 
from Message msg 
left outer join recipientInfo rep on msg.messageID = rep.messageID
于 2012-04-24T09:06:35.780 に答える
-1

2つのテーブルをマージするだけです

https://www.simple-talk.com/sql/t-sql-programming/concatenating-row-values-in-transact-sql/

これはもっと適したものかもしれませんし、それを行う方法は複数あります

于 2012-04-24T09:12:13.707 に答える