在一列中拆分分隔字符串并保持其他列不变
Split delimited string in one column and keep other column intact
我的table数据如下
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()
但不知道组合和显示。请指教
您可以使用 CROSS APPLY 来执行此操作。这是一个示例,但您需要根据 Split 函数调整列名:
SELECT a.Key, b.Data from YourTable a
CROSS APPLY dbo.Split(a.Ids, ',') b
你可以不用 Dbo.Split
。
这是你的样本table
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
我的table数据如下
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()
但不知道组合和显示。请指教
您可以使用 CROSS APPLY 来执行此操作。这是一个示例,但您需要根据 Split 函数调整列名:
SELECT a.Key, b.Data from YourTable a
CROSS APPLY dbo.Split(a.Ids, ',') b
你可以不用 Dbo.Split
。
这是你的样本table
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