SQL Server: comment regrouper par sous-string

J'ai la procédure stockée suivante pour récupérer des données d'une table. La table a une colonne "région" qui contient une valeur comme "APAC: China" etc. pour laquelle j'utilise la fonction de sous-string afin de supprimer le: et tout ce qui suit.

Le travail ci-dessous, sauf qu'il répertorie tous les loggings séparément au lieu de les regrouper par ma sous-string. J'ai donc par exemple plusieurs articles avec la région "APAC" au lieu d'un seul avec tous les apparaissant ci-dessous.

Ma procédure stockée:

CREATE PROCEDURE [dbo].[CountRegions] AS BEGIN SET NOCOUNT ON; SELECT SUBSTRING(region, 1, CHARINDEX(':', region) - 1) AS region, COUNT(*) AS groupCount, FROM SOPR_LogRequests WHERE logStatus = 'active' GROUP BY region ORDER BY groupCount desc, region FOR XML PATH('regions'), ELEMENTS, TYPE, ROOT('ranks') END 

Mon résultat:

 <ranks> <regions> <region>APAC</region> <groupCount>1</groupCount> </regions> <regions> <region>EMEA</region> <groupCount>1</groupCount> </regions> <regions> <region>APAC</region> <groupCount>1</groupCount> </regions> // ... </ranks> 

Résultat attendu:

 <ranks> <regions> <region>APAC</region> <groupCount>2</groupCount> </regions> <regions> <region>EMEA</region> <groupCount>1</groupCount> </regions> // ... </ranks> 

Est-ce que anyhone peut m'aider avec ça?

Merci pour toute aide, Tim.

Votre group by ne saurait pas si vous faites reference à la colonne sous-jacente, ou à la sortie de votre code de fonction (il prendrait la colonne sous-jacente), vous devez donc répéter le code dans le group by :

 CREATE PROCEDURE [dbo].[CountRegions] AS BEGIN SET NOCOUNT ON; SELECT SUBSTRING(region, 1, CHARINDEX(':', region) - 1) AS region, COUNT(*) AS groupCount, FROM SOPR_LogRequests WHERE logStatus = 'active' GROUP BY SUBSTRING(region, 1, CHARINDEX(':', region) - 1) ORDER BY groupCount desc, region FOR XML PATH('regions'), ELEMENTS, TYPE, ROOT('ranks') END