Sql 列中包含“,”的重复行&引用;

Sql 列中包含“,”的重复行&引用;,sql,sql-server,string,csv,unnest,Sql,Sql Server,String,Csv,Unnest,我有如下数据 name subject a m1 b m2 c m1, m3 d m4, m5, m6 e m7 我想复制列subject包含,的整行内容。原始数据的列数比此处显示的要多。我将在主题列中复制一行,行数等于,,因此我将重复c1次和d2次 我不知道subject列中有多少个单元格会有,,而且subject列的单元格中的值数量没有上限 然后,我希望在复制的行上只保留一个值,以便来自subject列的所有值都显示一次 n

我有如下数据

name    subject
a       m1
b       m2
c       m1, m3
d       m4, m5, m6
e       m7
我想复制列
subject
包含
的整行内容。原始数据的列数比此处显示的要多。我将在
主题
列中复制一行,行数等于
,因此我将重复
c
1次和
d
2次

我不知道
subject
列中有多少个单元格会有
,而且
subject
列的单元格中的值数量没有上限

然后,我希望在复制的行上只保留一个值,以便来自subject列的所有值都显示一次

name    subject
a       m1
b       m2
c       m1
c       m3
d       m4
d       m5
d       m6
e       m7

如果您运行的是SQL Server 2016或更高版本,则可以使用:


string\u split()?它将如何确保我们正确地重复其余的列?@user2543622:那是。如果您想从原始表中获得更多列,只需在
select
子句中列出它们。我可以说
select t.*,将值设置为subject1
,然后删除
subject
?@user2543622:在SQL Server中,您不能从结果集中“删除”列。您可以执行
选择t.*,将值设置为subject1
,然后在结果集中同时获得
suject
subject1
。否则,您需要在
select
子句中列出所有列名(除了
subject
)。
select t.name, value as subject
from mytable t
cross apply string_split(subject, ', ')