Sql server 从另一个表中选择“多值”,并将一个字符串按-

Sql server 从另一个表中选择“多值”,并将一个字符串按-,sql-server,select,view,Sql Server,Select,View,我在MS SQL Server中有两个表 表1 ID Name ------------- 10 Series 11 Movie 12 Music 13 Other 表2 ID IDCatg Value --------------------------- 1 10 Hannibal 2 10 Blacklist 3 10

我在MS SQL Server中有两个表

表1

ID   Name  
-------------
10   Series      
11   Movie      
12   Music      
13   Other     
表2

ID    IDCatg    Value  
---------------------------
1       10          Hannibal
2       10          Blacklist
3       10          POI
4       11          Hitman
5       11          SAW
6       11          Spider man
7       12          taylor swift
8       12          britney spears
我想在表2中通过IDCatg进行选择,并在表1中创建一个新列,如下所示:

IDCatg     Name        Value
--------------------------------------------
10         Series      Hannibal-Blacklist-POI
11         Movie       Hitman-SAW-Spider man
12         Music       taylor swift-britney spears

如何通过视图执行此操作?

您可以使用
工具执行此操作:

SELECT T21.IDCatg, T1.Name,
      [Value] = STUFF((
          SELECT '-' + T22.[Value]
          FROM Table2 T22
          WHERE T21.IDCatg = T22.IDCatg
          FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
FROM Table2 T21 JOIN 
     Table1 T1 ON T1.ID=T21.IDCatg
GROUP BY T21.IDCatg,T1.Name
结果:

IDCatg  Name    Value
---------------------------------------------
10      Series  Hannibal-Blacklist-POI
11      Movie   Hitman-SAW-Spider man
12      Music   taylor swift-britney spears
样本结果

编辑:

值的类型为int时,可以将其强制转换为varchar:

  [Value] = STUFF((
      SELECT '-' + CAST(T22.[Value] AS Varchar(MAX))

谢谢,它可以工作,但是如果我的值类型是int,我会得到以下错误:将varchar值“”转换为数据类型int时失败通常当我的值类型是int时,“-”不工作!我要做什么?请回答另一个问题!如果我想将值连接到另一个表,并用表3中的其他字段替换值,我该怎么做?@mosyflasher:只需将
Table2
替换为新表的名称,并将
value
替换为新字段名称。我认为这不是真的。因为我需要三张桌子。我的意思是我们所做的选择是正确的,现在我想通过加入表3来替换唯一的值。示例:汉尼拔黑名单POI=>x-y-Z可能重复的