从另一个表中选择多个值并放入一个由 - 分割的字符串

Posted

技术标签:

【中文标题】从另一个表中选择多个值并放入一个由 - 分割的字符串【英文标题】:Select multi value from another table and put in one string split by - 【发布时间】:2015-07-11 06:44:56 【问题描述】:

我在 MS SQL Server 中有 2 个表。

表 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

我怎样才能通过视图做到这一点?

【问题讨论】:

Concatenate row values T-SQL的可能重复 【参考方案1】:

您可以使用STUFF

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

SQL Fiddle 中的示例结果

编辑:

Value 的类型为 int 时,可以强制转换为 varchar:

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

【讨论】:

谢谢,它可以工作,但如果我的值类型是 int,我会收到此错误:将 varchar 值“,”转换为数据类型 int 时转换失败 通常当我的值类型是 int 时,'-' 不起作用!我必须做什么 另一个问题请!如果我想将值加入另一个表并用表 3 中的其他字段替换值,我该怎么做? @mosyflasher:只需将Table2替换为新表的名称,将Value替换为新的字段名称即可。 我不认为这是真的。因为我这里需要 3 张桌子。我的意思是我们所做的这个选择是真的,现在我只想通过加入表 3 来替换值。示例:Hannibal-Blacklist-POI => x-y-z

以上是关于从另一个表中选择多个值并放入一个由 - 分割的字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何防止在表中的多个下拉列表中选择相同的值并 POST 到服务器

获取不同视图中存在的选择器视图的选定值并在其他视图中使用字符串

如何在python中使用正则表达式在字符串之间选择值并放置在数据框的列中

如何使用第一个表中的逗号分隔值从另一个表中选择行? [复制]

获取单个变量中的多个值并使用它与另一个变量中的单个值进行比较

Mysql 从一个表中选择全部,从另一个表中选择一些使用别名