Lim*_*lva 1 sql sql-server split
Column1
--------
1,2,4
2,3,5
2,1,3
Run Code Online (Sandbox Code Playgroud)
我在表中有一个列,如上所示以逗号分隔。我需要从中获得以下输出:
No Count
----------
1 2
2 3
3 2
4 1
Run Code Online (Sandbox Code Playgroud)
当我尝试
SELECT SUM(LEN(Holidays) - LEN(REPLACE(Holidays, ',', '')) + 1)
FROM [dbo].[OhLog]
Run Code Online (Sandbox Code Playgroud)
我没有得到明智的项目计数。相反,它正在得到充分计数。
您可以使用CROSS_APPLYwithSTRING_SPLIT从逗号分隔的数据值创建行,然后COUNT是每个值的出现次数:
SELECT value as [Holiday], COUNT(*) AS [Count]
FROM OhLog
CROSS APPLY STRING_SPLIT([Holidays], ',')
GROUP BY value
Run Code Online (Sandbox Code Playgroud)
输出:
Holiday Count
1 2
2 3
3 2
4 1
5 1
Run Code Online (Sandbox Code Playgroud)
如果您的数据库兼容版本不是至少 130,您将无法访问STRING_SPLIT. 您可以按照手册中的说明修改兼容性版本,或者使用此查询(基于此答案):
SELECT [Holiday], COUNT(*) AS [Count]
FROM (SELECT Split.a.value('.', 'NVARCHAR(MAX)') [Holiday]
FROM (SELECT CAST('<X>'+REPLACE([Holidays], ',', '</X><X>')+'</X>' AS XML) AS String
FROM Ohlog
) AS A
CROSS APPLY String.nodes('/X') AS Split(a)) AS O
GROUP BY [Holiday]
Run Code Online (Sandbox Code Playgroud)
输出与先前查询相同。dbfiddle 上的演示
| 归档时间: |
|
| 查看次数: |
1213 次 |
| 最近记录: |