我的表格数据如下
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()
但不知道要合并和展示。请指教
答案 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