SQL-使用另一个表中的值更新一个表中的行-多个匹配

SQL-使用另一个表中的值更新一个表中的行-多个匹配,sql,sql-server,Sql,Sql Server,我正在尝试使用Sales表中的数据在Customer表中追加值 客户在销售表中可以有多条记录: 在此,我有一个共同的观点: SalesID CustomerID SalesComment CustomerComment ------------------------------------------------------------ 1 14 Com1 Customer Comment 1 2 15

我正在尝试使用Sales表中的数据在Customer表中追加值

客户在销售表中可以有多条记录:

在此,我有一个共同的观点:

SalesID CustomerID  SalesComment        CustomerComment
------------------------------------------------------------
1       14              Com1            Customer Comment 1
2       15              Com2            Customer Comment 2
3       14              Com3            Customer Comment 1
4       14                              Customer Comment 1
我想进行如下更新:

UPDATE Customer
SET Customer.ShopBookKommentar = CAST([ShopBookKommentar] AS NVARCHAR(MAX)) +
                                 CAST(CHAR(13) + CHAR(10) + S.Comments AS NVARCHAR(MAX)) 
FROM Customer C 
INNER JOIN Sales S ON S.CustomerID = c.ID

但它不会更新其中一个Sales rows comment字段为空的任何客户行,看起来您正在使用SQL Server。您需要使用表别名进行更新:

只有在中间结果不够大的情况下,才需要演员阵容。但这不应该是个问题

编辑:

我猜您实际上希望应用来自不同销售行的多个注释。这有点棘手:

UPDATE c
    SET ShopBookKommentar = c.ShopBookKommentar + c.somm
    FROM (SELECT c.*,
                 (SELECT CHAR(13) + CHAR(10) + S.Comments 
                  FROM Sales s
                  WHERE S.CostumerID = c.ID AND
                        S.Comments IS NOT NULL
                  FOR XML PATH, TYPE
                 ).value(N'.[1]', N'varchar(max)') as scomm                   
          FROM c
         ) Costumer C INNER JOIN
         (Sales S
         ON ;

哦,很抱歉,我只是更详细地阅读了你的代码。。。您希望将sales表中客户的所有评论添加到customers表中的shopbookkommentar字段-对吗?问题是:您只能每行更新一行,并且在查询完成之前无法获得更新的行结果。在您的情况下,这意味着仅将sales表中一个客户id的最后一条注释写入customers表@彼得汉森。在这种情况下,联接可能找不到任何匹配的行。您应该使用SELECT c.*中的SELECT.UPDATE CUSTOMER SET SHOPBOOK KOMMENTAR=CUSTOMER.SHOPBOOK KOMMENTAR+scomm检查逻辑,从Sales S中选择CHAR13+CHAR10+S.Comments,其中S.customerid=c.ID,S.Comments不为NULL,S.Comments为XML路径,键入.valueN'.[1]',N'varcharmax'作为客户c客户内部的scomm加入客户ID=S.CustomerId上的销售;
UPDATE c
    SET ShopBookKommentar = c.ShopBookKommentar + c.somm
    FROM (SELECT c.*,
                 (SELECT CHAR(13) + CHAR(10) + S.Comments 
                  FROM Sales s
                  WHERE S.CostumerID = c.ID AND
                        S.Comments IS NOT NULL
                  FOR XML PATH, TYPE
                 ).value(N'.[1]', N'varchar(max)') as scomm                   
          FROM c
         ) Costumer C INNER JOIN
         (Sales S
         ON ;