2011-01-03 2 views
0

J'ai une question concernant mon rapport, le format du rapport est que sousComment compter les billets comme DateWise

**Date**   **Received**  **Closed**  **Pending** 
12/01/10    1000     900    100 
12/02/10    2000    1000    1000 
12/03/10    1500    1300    200 

Le rapport ci-dessus montre les billets de Help Desk reçus, Fermé, En attendant le comte que la date sage.

Comment puis-je créer une requête SQL dynamique pour afficher le résultat ci-dessus?

  • billets reçus est calculé sur SubmitedDate
  • Billets fermés est calculé sur ClosedDate avec le statut « Fermé »
  • même pour l'attente de billets dont le statut est « en attente ».

Veuillez me fournir l'idée ou quelques exemples de requêtes SQL.

+0

pouvez-vous poster votre structure de table? –

Répondre

2

Ecrire les reçus, fermé, et les requêtes en attente séparément, puis les réunir comme ceci:

SELECT r.[Date], r.Count As Received, c.Count As Closed, p.Count AS Pending 
FROM 
    (/* Received query here */) r 
FULL JOIN 
    (/* Closed query here */) c ON c.[Date] = r.[Date] 
FULL JOIN 
    (/* Pending query here */) p ON p.[Date] = r.[Date] 

J'ai choisi une jointure complète parce que vous ne voudriez pas un à tout moment à jamais zéro résultat forcer une ligne à être triée des résultats.

+0

Merci Joel, ça fonctionne parfaitement. Mais la seule chose à faire est de prendre le temps d'afficher des données parce que la sélection de date sage si je sélectionne Jan à Dec alors la requête prend 3 minutes mais affiche les bonnes données. –

+0

@Iftikhar Si vous stockez actuellement les horodatages exacts, vous pouvez améliorer les performances en ajoutant des colonnes calculées à votre table pour stocker uniquement les dates fermées/en attente/soumises (portion temporelle remise à zéro pour la colonne). De cette façon, le serveur sql pré-calcule la partie la plus chère de votre requête lors de l'insertion. –

+0

Salut Joel, j'utilise la vue pour extraire les données d'état de la base de données parce que dans le service desk, il y a plusieurs types de tâches comme incident, problème, tâche, ordre de travail. les quatre vues pour l'incident, le problème, la tâche, le travail et ensuite créer une vue pour collectivement obtenir toutes les informations des emplois. Dans la requête, j'ai utilisé cette vue pour obtenir les données. Alors s'il vous plaît gardez ce scénario et dites-moi quel est le meilleur moyen d'améliorer les performances. je –

2

Utilisation:

SELECT CONVERT(VARCHAR, t.submitteddate, 101) AS [date]. 
     COUNT(t.submitteddate) AS received 
     SUM(CASE WHEN t.status = 'closed' THEN 1 ELSE 0 END) AS closed, 
     SUM(CASE WHEN t.status = 'pending' THEN 1 ELSE 0 END) AS pending 
    FROM YOUR_TABLE t 
GROUP BY CONVERT(VARCHAR, t.submitteddate, 101) 
ORDER BY [date] 

Si vous voulez voir les dates où aucun n'a été vendu, vous allez devoir obtenir une table de dates, puis LEFT JOIN la requête ci-dessus pour que fonction de la date.

Questions connexes