-1

我的表数据如下

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()但不知道组合和展示。请指教

4

2 回答 2

1

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

SELECT a.Key, b.Data from YourTable a
CROSS APPLY dbo.Split(a.Ids, ',') b
于 2015-01-07T11:42:10.423 回答
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

在此处输入图像描述

于 2015-01-07T11:57:18.780 回答