2016-09-21 2 views
0

Хорошо, так что в основном мне просто нужно выяснить, сколько из каждого числа есть в строке. Так, например:SQL подсчитывает номер типа значения

3 2 9 4 3 3 4 3 4 3 3 4 4 3 3 3 3 3 3 3 3 3 3 3 3 2 3 3 3 3 3 3 4 3 3 4 13 13 4 3 3 13 3 13 13 13 13 13 13 13 13 13 9 4 4 4 4 3 5 3 9 10 3 4 8 10 4 3 4 13 13 13 13 4 2 5 5 13 13 13 13 13 4 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 9 13 

Это цифры, все в одной строке. Мне нужно подсчитать, сколько 2, 3, 4 и т. Д. Есть в этой строке. Как мне это сделать?

Функции используются SQL, а более конкретно я использую службу Klipfolio.

+0

Вы можете попробовать CHARINDEX в цикле в то время как – Missy

ответ

0

Основная идея состоит в том, чтобы разделить строку (разделенная запятой) и подсчитать/сгруппировать строки из результата split (table). Также см. T-SQL split string для более эффективных способов разделения строки.

Пример:

DECLARE @String varchar(100) = '3 2 9 4 3 3 4 3 4 3 3 4 4 3 3 3 3 3 3 3 3 3 3 3 3 2 3 3 3 3 3 3 4 3 3 4 13 13 4 3 3 13 3 13' 
-- To change ',' to any other delimeter, just change ',' to your desired one 
DECLARE @Delimiter CHAR = ' '  

SELECT Num, Count(Num) ct 
FROM (
    SELECT LTRIM(RTRIM(Split.a.value('.', 'VARCHAR(100)'))) 'Num' 
    FROM 
    (  
     SELECT CAST ('<M>' + REPLACE(@String, @Delimiter, '</M><M>') + '</M>' AS XML) AS Data    
    ) AS A 
    CROSS APPLY Data.nodes ('/M') AS Split(a) 
) A GROUP BY Num 

Производит:

Num ct 
--- --- 
13 4 
    2 2 
    3 29 
    4 8 
    9 1 
Смежные вопросы