J'essaye actuellement de countr combien de fois la catégorie d'un article apparaît dans une table de billet.
Le problème est que les catégories ont des sous-catégories et qu'elles sont toutes listées comme une seule string dans la table ("Cat1> Subcat1", "Cat1> Subcat2", etc).
Ce que j'ai fait jusqu'ici est géré pour get toutes les catégories distinctes énumérées, mais je veux enlever toutes les sous-catégories des résultats et combiner n'importe quels doubles.
À titre d'exemple, j'ai les catégories et dénombrements suivants:
Catégorie | 13
Catégorie> Subcat1 | 14
Catégorie> Subcat2 | 3
Ce que je veux voir c'est:
Catégorie | 30
Jusqu'à présent, j'ai réussi à supprimer les sous-catégories, mais la ligne réelle est essentiellement dupliquée avec des valeurs différentes:
Catégorie | 13
Catégorie | 14 Catégorie | 3
Voici mon code actuel:
SELECT CASE WHEN CHARINDEX(' >',SUBSTRING(KM2.GENERATEDCATS,16,20))=0 THEN SUBSTRING(KM2.GENERATEDCATS,16,20) ELSE SUBSTRING(SUBSTRING(KM2.GENERATEDCATS,16,20),1,CHARINDEX(' >',SUBSTRING(KM2.GENERATEDCATS,16,20))) END AS "Final", COUNT(KM2.GENERATEDCATS) AS "Count" FROM INCIDENTSM1 AS SD LEFT JOIN KMDOCUMENTM1 AS KM1 ON SD.CBA_KPF_ID=KM1.ID LEFT JOIN KMDOCUMENTA2 AS KM2 ON KM1.ID=KM2.ID GROUP BY KM2.GENERATEDCATS ORDER BY Count DESC
Légende:
INCIDENTSM1 – Table des tickets
KMDOCUMENTM1 – Table d'article
KMDOCUMENTA2 – Catégories (séparées de la table principale)
GENERATEDCATS – Colonne Catégorie
Est-il possible de combiner toutes ces lignes de catégorie en une seule avec un nombre total?
Essayez de GROUP BY
le nom de catégorie extrait:
SELECT CASE WHEN CHARINDEX(' >',SUBSTRING(KM2.GENERATEDCATS,16,20))=0 THEN SUBSTRING(KM2.GENERATEDCATS,16,20) ELSE SUBSTRING(SUBSTRING(KM2.GENERATEDCATS,16,20),1, CHARINDEX(' >',SUBSTRING(KM2.GENERATEDCATS,16,20))) END AS "Final", COUNT(KM2.GENERATEDCATS) AS "Count" FROM INCIDENTSM1 AS SD LEFT JOIN KMDOCUMENTM1 AS KM1 ON SD.CBA_KPF_ID=KM1.ID LEFT JOIN KMDOCUMENTA2 AS KM2 ON KM1.ID=KM2.ID GROUP BY CASE WHEN CHARINDEX(' >',SUBSTRING(KM2.GENERATEDCATS,16,20))=0 THEN SUBSTRING(KM2.GENERATEDCATS,16,20) ELSE SUBSTRING(SUBSTRING(KM2.GENERATEDCATS,16,20),1,CHARINDEX(' >', SUBSTRING(KM2.GENERATEDCATS,16,20))) END ORDER BY Count DESC