Comment countr le nombre de text individuel d'une colonne de tous les loggings

J'ai besoin d'afficher le nombre de chaque occurrence de text sur toutes les lignes d'une colonne particulière.

Voir le résultat ci-dessous:

entrez la description de l'image ici Ici, j'ai un set de balises, je dois afficher countr chaque balise comme une colonne dans le nom «Total»

Ce que j'ai fait est:

DECLARE @tags VARCHAR(8000) DECLARE @tot INT select @tags = coalesce(@tags + ',' , ' ') + Labels from addNew select @tot = count(@tags) select a.Labels as Tags,@tot as Total from addNew a inner join addNew n on a.Labels = n.Labels group by a.Labels 

Le résultat doit être:

entrez la description de l'image ici
Obtenir le code de requête: individu_count_set.sql
S'il vous plaît suggérer vos questions pour get le résultat souhaité.

Merci d'avance.

Si vous utilisez des versions autres que SQL SERVER 2016 , vous devez créer une fonction définie par l'user pour split ces strings séparées par des virgules.

La réponse entière est la suivante:

 Go CREATE FUNCTION [dbo].SsortingngSplit ( @Labels varchar(8000) ) RETURNS @RESULT TABLE(Value VARCHAR(8000)) AS BEGIN DECLARE @SeparatorPosition INT = CHARINDEX(',', @Labels ), @Value VARCHAR(8000), @StartPosition INT = 1 IF @SeparatorPosition = 0 BEGIN INSERT INTO @RESULT VALUES(@Labels) RETURN END SET @Labels = @Labels + ',' WHILE @SeparatorPosition > 0 BEGIN SET @Value = SUBSTRING(@Labels , @StartPosition, @SeparatorPosition- @StartPosition) IF( @Value <> '' ) INSERT INTO @RESULT VALUES(@Value) SET @StartPosition = @SeparatorPosition + 1 SET @SeparatorPosition = CHARINDEX(',', @Labels , @StartPosition) END RETURN END Go 

Après avoir créé la fonction ci-dessus, la requête suivante devrait faire le travail:

 select concat(fn.Value,'(',count(fn.Value),')') as TagCount from addnew a cross apply STRINGSPLIT(a.Labels) as fn group by fn.Value order by TagCount; 

Exemple de travail

Remarque: Si vous utilisez Sql Server 2016 , vous pouvez utiliser la fonction STRING_SPLIT() .

Pour plus d'informations cliquez ici

Solution pour SQL SERVER 2016:

 select concat(fn.Value,'(',count(fn.Value),')') as TagCount from addnew a cross apply STRING_SPLIT(a.Labels) as fn //use in-built function, no need to create UDF group by fn.Value order by TagCount; 

J'espère que cela aide!