将字符串列拆分为单列并排序

lvmkulzt  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(290)

我正在编写一个函数来拆分逗号分隔的列,并在单个列中列出值并对它们进行计数。
样本数据

CREATE TABLE stri 
(name varchar(100))
INSERT INTO stri 
VALUES ('a1, a2, a9, a8')

我将使用它来拆分值,但是我需要将它们放在一个列中。我在考虑旋转,并使其复杂化,因为我希望结果按升序排序。

SELECT 
     REVERSE(PARSENAME(REPLACE(REVERSE(name), ',', '.'), 1)) AS name1
   , REVERSE(PARSENAME(REPLACE(REVERSE(name), ',', '.'), 2)) AS name2
   , REVERSE(PARSENAME(REPLACE(REVERSE(name), ',', '.'), 3)) AS name3
   ,REVERSE(PARSENAME(REPLACE(REVERSE(name), ',', '.'), 4)) AS name4
FROM dbo.stri;
GO

将显示上述查询

name1 name2 name3 name4
a1    a2    a9    a8

我预期的结果是:

name
          a1
          a2
          a8
          a9

           4 -- count

敬请指点。

vx6bjr1n

vx6bjr1n1#

如果您使用的是sql server 2016或更高版本,则可以使用 string_split 如下所示:

select trim(value)
from stri A
outer apply string_split(A.[name], ',')
order by 1

您可以在上面的查询中使用cte统计记录。
如果您使用的是sql server 2014,则可以使用 XML 方法如下:

SELECT LTRIM(RTRIM(Split.a.value('.', 'NVARCHAR(MAX)'))) Result
FROM
(
    SELECT CAST('<X>'+REPLACE([Name], ',', '</X><X>')+'</X>' AS XML) AS String
    FROM STRI
) AS A
CROSS APPLY String.nodes('/X') AS Split(a)
ORDER BY 1

db<>小提琴演示
请在此查看更多详细信息。

相关问题