Sql server 从另一个表中选择“多值”,并将一个字符串按-
我在MS SQL Server中有两个表 表1Sql 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
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可能重复的