使用内部联接更新名称 - 多个值

时间:2014-02-03 06:33:51

标签: sql sql-server sql-server-2008

我想进行查询,将产品名称设置为产品NAme +类别名称,其中类别可以是多个

Update P Set P.Name = ISNULL(P.Name,'')+','+ C.NAme 
from Product P
Left Outer Join Category C On P.CategoryId = C.Id.

现在一个产品可以有多个类别 例如。 Alpenliebe Jar产品可以有多个类别作为Toffies和Candies 我想把它的名字设置为Alpenliebe Jar,Toffies,Candies 我当前的查询有效,但只设置名称为Alpenliebe Jar,Toffies

任何帮助

4 个答案:

答案 0 :(得分:1)

试试这个......

UPDATE P SET P.Name = P.Name+'-'+ SUBSTRING((SELECT ', ' + C.NAme FROM Product P INNER  JOIN Category C ON P.CategoryId = C.Id 
        WHERE P.Name = PH.Name
        ORDER BY P.Name FOR XML PATH('')),2,200000) FROM Product PH

答案 1 :(得分:1)

试试这个: -

Update p
Set P.Name = STUFF((
                       SELECT P.Name +  ',' + IsNull(CName,'')
                       FROM Category  c
                       WHERE p.CategoryID = c.ID
                       FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
from Product p

答案 2 :(得分:0)

试试这个

DECLARE @Names VARCHAR(8000)  
SET @Names = SELECT COALESCE(@Names + ',', '') + C.Name FROM Category JOIN Product P On P.CategoryId = C.Id.

Update P Set P.Name = ISNULL(P.Name,'')+ ',' + @Names 
FROM Product P

COALESCE

答案 3 :(得分:0)

WITH cte(Id,Name) 
AS 
(

   SELECT ID, Name
   FROM Category
   WHERE [CategoryId] IS NULL  

   UNION ALL -- starts recursion

   SELECT  ID, P.Name +',' C.Name 
   FROM Category C
   JOIN cte P ON P.ID = C.[ParentId]
)

Update P Set P.Name = C.NAme + ISNULL(P.Name,'')
from Product P
Left Outer Join Category C On P.CategoryId = C.Id