Sql server SQL,按1列拆分,并复制其他列
你好 也许你可以帮助我,或者告诉我我想做的是不可能的还是完全错误的 我试图创建一个sqlfiddle,但目前页面似乎已关闭 (SQL Server 2008)我有一个表,假设它有3列,但是设计它的人没有规范化,所以一列包含多个值,它是这样的:Sql server SQL,按1列拆分,并复制其他列,sql-server,view,split,Sql Server,View,Split,你好 也许你可以帮助我,或者告诉我我想做的是不可能的还是完全错误的 我试图创建一个sqlfiddle,但目前页面似乎已关闭 (SQL Server 2008)我有一个表,假设它有3列,但是设计它的人没有规范化,所以一列包含多个值,它是这样的: IdCol Col1 Col2 Col3 1 a1 b1 a, b, c 2 a2 b2 d, e, f SELECT NewIdCol = ROW_NUMBE
IdCol Col1 Col2 Col3
1 a1 b1 a, b, c
2 a2 b2 d, e, f
SELECT
NewIdCol = ROW_NUMBER() OVER(ORDER BY t.IdCol, x.ItemNumber),
t.IdCol,
t.Col1,
t.Col2,
x.Item
FROM Test t
CROSS APPLY [dbo].[DelimitedSplit8K](t.Col3, ',') x
如您所见,Col3包含多个由“,”分隔的值
我想要实现的是创建一个类似以下内容的视图(无法修改表,因为它们不允许我修改应用程序):
NewIdCol IdCol Col1 Col2 Col3
1 1 a1 b1 a
2 1 a1 b1 b
3 1 a1 b1 c
4 2 a2 b2 d
5 2 a2 b2 e
6 2 a2 b2 f
因此,最终结果将Col3值拆分为不同的行,并复制其他列的值。(实际表大约有20列,其中2列包含多个值,因此我需要对这两列都执行此操作)
起初我以为这很容易。。。但后来我遇到了一个关于如何分割那根线的障碍。。。首先我考虑使用一个拆分函数,但后来我不知道如何将它与其他列连接起来
提前感谢。您需要一个函数,用于将逗号分隔的字符串拆分为单独的行。然后调用如下函数:
IdCol Col1 Col2 Col3
1 a1 b1 a, b, c
2 a2 b2 d, e, f
SELECT
NewIdCol = ROW_NUMBER() OVER(ORDER BY t.IdCol, x.ItemNumber),
t.IdCol,
t.Col1,
t.Col2,
x.Item
FROM Test t
CROSS APPLY [dbo].[DelimitedSplit8K](t.Col3, ',') x
这是杰夫·摩登的作品
理想情况下,您希望停止在单个列中存储多个值。这违反了1NF。同时看看这篇文章。可能重复:使用
Split
功能仔细查看答案,它完全是为您的要求而设计的。太棒了!,交叉应用。。。从来没有想过,也谢谢你的分割功能,比我们这里有更好的方式。