在一列中拆分分隔的字符串并保持其他列不变

时间:2015-01-07 11:03:49

标签: sql-server-2008 dbo

我的表格数据如下

x------x--------------------x
| Key  |        Ids         |
x------x--------------------x
|  1   |    23,34,45,56,78  |
|  2   |    56,76,45,7,98   |
x------x--------------------x

我希望输出像

x---------------x
| Key  |   Ids  |
x------|--------x
|  1   |   23   |
|  1   |   34   |
|  1   |   45   |
|  1   |   56   |
|  1   |   78   | 
|  2   |   56   |
|  2   |   76   |
|  2   |   45   |
|  2   |   7    |
|  2   |   98   |
x------x--------x

我知道要使用dbo.split()但不知道要合并和展示。请指教

2 个答案:

答案 0 :(得分:1)

您可以使用CROSS APPLY执行此操作。这是一个示例,但您需要根据您的拆分功能调整列名称:

SELECT a.Key, b.Data from YourTable a
CROSS APPLY dbo.Split(a.Ids, ',') b

答案 1 :(得分:1)

您可以不使用Dbo.Split

这是您的示例表

SELECT * INTO #TEMP 
FROM
(
    SELECT 1 [KEY],'23,34,45,56,78' Ids
    UNION ALL
    SELECT 2,'56,76,45,7,98'
)TAB

这是查询

SELECT [KEY],PARSENAME(REPLACE(Split.a.value('.', 'VARCHAR(100)'),'-','.'),1) 'Ids' 
FROM  
(
     SELECT [KEY], CAST ('<M>' + REPLACE(Ids, ',', '</M><M>') + '</M>' AS XML) AS Data 
     FROM #TEMP     
) AS A 
CROSS APPLY Data.nodes ('/M') AS Split(a)

现在,如果你想使用dbo.Split本身,你可以使用上面的代码。

SELECT a.[Key], b.items
FROM TEMP a
CROSS APPLY dbo.Split(a.Ids, ',') b

enter image description here