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