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:
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:
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!