Sql server SQL,按1列拆分,并复制其他列

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

你好

也许你可以帮助我,或者告诉我我想做的是不可能的还是完全错误的

我试图创建一个sqlfiddle,但目前页面似乎已关闭

SQL Server 2008)我有一个表,假设它有3列,但是设计它的人没有规范化,所以一列包含多个值,它是这样的:

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
功能仔细查看答案,它完全是为您的要求而设计的。太棒了!,交叉应用。。。从来没有想过,也谢谢你的分割功能,比我们这里有更好的方式。