32

我有一个表 样本,其中存储的数据如下

Id   | String
--------------
1     abc,def,ghi
2     jkl,mno,pqr

我需要像..这样的输出

Id   | processedrows
--------------
1     abc
1     def
1     ghi
2     jkl
2     mno
2     pqr

如何对 SQL Server 中的选择查询执行相同操作?

4

5 回答 5

54

试试这个

 SELECT A.[id],  
     Split.a.value('.', 'VARCHAR(100)') AS String  
 FROM  (SELECT [id],  
         CAST ('<M>' + REPLACE([string], ',', '</M><M>') + '</M>' AS XML) AS String  
     FROM  TableA) AS A CROSS APPLY String.nodes ('/M') AS Split(a); 

参考这里

http://www.sqljason.com/2010/05/converting-single-comma-separated-row.html

于 2012-12-14T06:30:53.987 回答
1
SELECT EmployeeID,
LTRIM(RTRIM(m.n.value('.[1]','varchar(8000)'))) AS Certs
FROM
(
SELECT EmployeeID,CAST('<XMLRoot><RowData>' + REPLACE(Certs,',','</RowData><RowData>') + '</RowData></XMLRoot>' AS XML) AS x
FROM   @t
)t
CROSS APPLY x.nodes('/XMLRoot/RowData')m(n)
于 2017-05-01T11:02:35.950 回答
1

这样做的新方法:

    SELECT
         a.Id,
         b.value
    FROM
         Sample a 
         cross apply string_split(a.string,',') b
于 2021-10-26T11:14:35.877 回答
0

让我们试试下面的脚本:-

declare @str varchar(max)

SELECT @str = isnull(@str +',', '') + a.Value
FROM (SELECT Value Entityvalue from Table) a

select @str
于 2014-07-25T13:26:42.850 回答
0

试试这个。你会得到你的输出。

SELECT id,
PARSENAME(REPLACE(Split.a.value('.', 'VARCHAR(100)'),'-','.'),1) 'Values' 
FROM  
(
     SELECT algorithms,
     CAST ('<M>' + REPLACE(string, ',', '</M><M>') + '</M>' AS XML) AS Data 
     FROM   <TableName> 
) AS A 
CROSS APPLY Data.nodes ('/M') AS Split(a)
于 2015-04-17T13:09:41.350 回答