【发布时间】:2016-12-12 00:26:19
【问题描述】:
我继承了一个表(谁没有,对吧?),其中的数据如下所示:
Item | Properties | Quantity
--------------------------------------------------------------------
Shirt | button-down,polo,sleeveless | 4,5,8
短期内,我想创建一个视图,但最终我想在时间允许的情况下将数据导出到新版本的表中,并使其更像:
Item | Properties | Quantity
--------------------------------------------------------------------
Shirt | button-down | 4
Shirt | polo | 5
Shirt | sleeveless | 8
基本上,采用多个列组(我想会有其他表的列多于两列具有这种行为)已知是分隔符分隔并将它们分成不同的行?收集的任何其他与此不同的行将在它们之间共享,如本示例中的 Item。 # 个逗号在这些类型之间是一致的。
编辑:我使用了How to convert comma separated NVARCHAR to table records in SQL Server 2005? 的答案中给出的函数,这就是我目前所拥有的:
select distinct data.item, tmptbl.[String] from
data cross apply [ufn_CSVToTable](data.properties, ',') tmptbl ...
这适用于单列上下文,但将该函数直接应用于第二列(在本例中为数量)会生成所有可能的属性和数量组合,对吗?事实上,是的,当我尝试时,它确实导致了这种情况。看来我需要一个游标或类似的东西来有效地分解成单独的属性行 [i] |数量[i],将尝试构建它。或者可能只是选择数据并在应用程序端拆分它。
【问题讨论】:
-
一节讲SQL的课刚刚结束。在过去的几分钟里,我在 sql/tsql 上看到了多个未定义的问题,其中没有一个显示他们自己尝试解决的代码。请附上您自己尝试过的内容、遇到问题的地方以及准确而准确的问题,否则您的问题无法回答。
-
好的,谢谢。将更新以包含(尽管它只允许以这种方式破坏单个列)。
-
您是在使用 SQL Server 2005,还是只是顺便提及?使用适当的软件(MySQL、Oracle、DB2 等)和版本标记数据库问题很有帮助,例如
sql-server-2014。语法和功能的差异通常会影响答案。
标签: tsql sql-server-2005