2017-09-01 1 views
0

Notre logiciel génère des codes d'erreur que nous avons intégrés, ces codes sont sauvegardés sous une colonne dans une base de données SQL. L'objectif est de générer une requête à exécuter et de comptabiliser le nombre de fois où chaque erreur est apparue au cours des 30 derniers jours et de définir chaque résultat sur une variable client renvoyée.SQL - Comment compter les codes d'erreur personnalisés créés


set @error#1 = (@error#1 + 1) where Errors like '%E001%' and CreatedDate > DATEADD(DAY, -30, GETDATE()) 
print("There were" + @policyfail#1 + "Error#1's in the past month.") 

Donc, pour expliquer les pensées au-dessus, vous devriez prendre l'erreur variable personnalisée @ # 1 et ajouter 1 à pour chaque fois qu'il voit que le code d'erreur (E001) à partir dans un délai déterminé Cadre.

Toutes les erreurs sont insérées sous un code unique attaché au message I.E. "E001 - Erreur de connexion à la base de données SQL." et donc nous essayons de demander la partie de code au début ("E001")

Nous essayons également de pouvoir répéter cette requête plus petite pour toutes les erreurs que nous avons (nous en avons quelques centaines) dans une requête plus importante qui retournera le nombre d'occurrences de chaque erreur existante dans un seul script. Le problème que nous avons est que chaque action du logiciel enregistre les erreurs sous une seule chaîne jusqu'à ce que l'utilisateur se déconnecte. Ainsi, un utilisateur d'une journée aurait plusieurs erreurs enregistrées en tant que chaîne unique dans une seule cellule dans une table.


Les résultats de la requête plus grande devrait essentiellement par quelques centaines de lignes qui affiche le nombre de chaque erreur au cours du mois passé qui ressemble à ceci:

"There were 15000 Error#1's in the past month." 

"There were 20000 Error#2's in the past month." 

"There were 10000 Error#3's in the past month." 

Les résultats ci-dessus continuerait alors jusqu'à ce qu'il traverse toutes les erreurs.

+1

Enregistrez-vous ces codes d'erreur dans une table dans SQL Server? Si oui, veuillez afficher la structure du tableau et un échantillon de données. –

+2

Supprimez l'une des balises de base de données, car il existe des différences subtiles entre MySQL et SQL-Server et seul celui qui est pertinent pour la question doit être présent. –

+0

Quelle est votre question? – Xedni

Répondre

0

Comme une requête, vous pouvez le faire en utilisant quelque chose comme ceci:

SELECT COUNT(*) AS [Count], SUBSTRING([Errors], 1, 4) AS [ErrorCode] 
FROM [MyTableName] 
WHERE SUBSTRING([Errors], 1, 4) LIKE 'E[0-9][0-9][0-9]%' 
    AND [CreatedDate] > DATEADD(DAY, -30, GETDATE()) 
GROUP BY SUBSTRING([Errors], 1, 4) 

Si vous le souhaitez sous forme de texte, le itérer à travers ce avec un curseur et utilisez des instructions d'impression pour chaque ligne.