2012-07-19 9 views
1

J'ai regardé ici et il y a un certain nombre de questions impliquant la combinaison de deux enregistrements en un, mais je pense que le mien est un problème unique. J'ai un logiciel qui utilise des requêtes sql pour créer des gadgets de bureau pour notre logiciel de billetterie. Je veux savoir combien de tickets d'assistance chaque technicien a, et j'ai un code de travail pour cela. Il produit un graphique à barres qui fonctionne très bien, mais parfois, plusieurs techniciens ou un technicien et un gestionnaire sont affectés à un ticket, et je ne peux pas extraire ces données. Le code est:combiner deux enregistrements en un seul

SELECT TECHNICIAN, COUNT(TECHNICIAN) AS TICKETS 
FROM TABLE 

(il y a un peu de complexité supplémentaire avec une jointure je peux obtenir le nom de l'employé sur le graphique à barres en associant l'ID de l'employé à la table avec leurs noms réels, mais cela est version simplifiée)

Voici mon jeu actuel de résultat:

TECHNICIAN TICKETS 
Bob   5 
Bob, Harry 1 
Joe   6 
Mark   3 
Jeff   2 

et le jeu de résultats que je veux est:

TECHNICIAN TICKETS 
Bob   6 
Joe   6 
Mark   3 
Jeff   2 

Si le résultat défini ci-dessus entre dans le gadget, il crée une barre pour chaque enregistrement. Il y aurait donc un bar «bob» et un bar «bob, harry». De plus, je sais que je ne veux que des techniciens, donc je n'en ai pas besoin pour faire un disque 'Harry' séparé, il suffit d'ajouter les deux bob's ensemble. AUSSI, j'ai un accès en lecture seule à la base de données, donc la création de nouvelles tables pour contenir les données est sorti.

Merci!

+3

Votre table est pas bien normalisée. Il devrait y avoir deux rangées dans une autre table pour Bob et Harry sur Ticket-1 – codingbiz

+3

En supposant que Harry soit exclu pour être un manager, comment distinguer "Bob, Harry" (en donnant un pour Bob) de "Bob, Joe" (un pour Bob, un pour Joe)? – MartW

+0

Votre premier exemple de code n'est pas correct - vous devez avoir un GROUP BY que vous avez omis. –

Répondre

1

En supposant que la colonne TECHNICIAN est de 255 caractères:

SELECT Tech, Tickets = COUNT(*) 
FROM (
    SELECT 
    Tech = SUBSTRING 
      (
       TECHNICIAN, 1, 
       COALESCE(NULLIF(CHARINDEX(',', TECHNICIAN)-1, -1), 255) 
      ) 
    FROM dbo.[TABLE] 
) AS x 
GROUP BY Tech; 
+0

C'est génial! Maintenant, la seule chose est: où devrais-je mettre dans mes statemets qui annulent les gestionnaires? Exemple: ET TECHNICIEN <> 'HARRY' –

Questions connexes