我有一张下表
id name total
1 a 2
2 b 3
3 c,d,e,f 15
预期产出: -
id name total
1 a 2
2 b 3
3 c 15
4 d 15
5 e 15
5 f 15
我尝试过分割功能和XML,但没有用。
答案 0 :(得分:1)
因为你没有指定数据库名称,假设SQL SERVER。你可以尝试这个。
SELECT A.[id],
Split.a.value('.', 'VARCHAR(100)') AS String,A.total
FROM (SELECT [id],
CAST ('<M>' + REPLACE([name], ',', '</M><M>') + '</M>' AS XML) AS String ,
[total]
FROM #t) AS A
CROSS APPLY String.nodes ('/M') AS Split(a);
请参阅此article
答案 1 :(得分:0)
您使用的是哪个版本的SQL?
split函数用于分割文本字符串,但您要求的是对表格本身格式的更改。
你的表有一个id = 3,name = c,d,e,f,total = 15的元组。
如果你想要id = 3,name = c等等,你必须改变数据。
从问题的表达方式来看,它意味着您希望以不同的方式呈现数据,但id是用于区分数据库中行的定义列。
您可以自动生成一个新表,在这种情况下,split语句可用于将每个元素从逗号分隔的记录中删除。
一旦你有了这个项目列表,假设你的id字段是一个标识字段(自动递增),你就可以为每个元素运行一个insert语句。
您可能能够使用内部选择来获取您正在寻找的那种输出,该内部选择将逗号分隔的值列表拆分,但您需要一些过程SQL(或T-SQL ...您没有指定您的SQL服务器)迭代值并将它们插入到新表中。 如果你确实沿着这条路线前进,那么必须抛弃id值,你会将列表视为原始数据集。
编辑:“没有显示名称”发布的示例与您将获得表单中的数据的距离非常接近。 名称“c”,“d”,“e”和“f”的ID都是3,但您的格式非常接近。