2015-01-07 118 views
-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()但不要」不知道要結合和展示。請告知

+0

_Don't存儲數據那樣的!_你首先描述的輸出,可以儲存這些數據。 –

回答

1

您可以使用CROSS APPLY來做到這一點。這裏有一個例子,但你需要調整取決於你的Split函數的列名:

SELECT a.Key, b.Data from YourTable a 
CROSS APPLY dbo.Split(a.Ids, ',') b 
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本身就可以使用日e上面的代碼。

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

enter image description here

+0

我已更新。 @Nisha –

相關問題