2011-01-03 14 views
0

Ich habe eine Abfrage meinen Berichts in Bezug auf, ist der Bericht Format wie unterWie Graf-Tickets DateWise

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

Der obige Bericht der Help Desk Tickets erhalten, Geschlossen zeigt, weisen Bis Graf als Datum.

Wie kann ich eine dynamische SQL-Abfrage erstellen, um das obige Ergebnis anzuzeigen?

  • Received Tickets berechnet auf SubmitedDate
  • Closed-Tickets ClosedDate mit dem Status "Geschlossen" berechnet wird
  • gleiche gilt für Tickets, deren Status Pending ist "Pending".

Bitte stellen Sie mir die Idee oder einige Beispiel-SQL-Abfragen.

+0

können Sie Ihre Tabellenstruktur posten? –

Antwort

2

schreiben die empfangenen, geschlossen und anstehenden Anfragen getrennt, und sie dann miteinander verbinden wie folgt aus:

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] 

wählte ich ein voll anschließen, weil Sie kein Null-Ergebnis an jedem Punkt jemals möchte erzwinge das Herausschneiden einer Reihe aus den Ergebnissen.

+0

Danke Joel, es funktioniert perfekt. Aber nur die Abfrage dauert Zeit, um Daten anzuzeigen, da Datumsauswahl, wenn ich Jan bis Dec auswählen, Abfrage dauert 3 Minuten, aber zeigen Sie die richtigen Daten. –

+0

@Iftikhar Wenn Sie derzeit exakte Zeitstempel speichern, können Sie die Leistung verbessern, indem Sie berechnete Spalten zu Ihrer Tabelle hinzufügen, um nur die Daten für abgeschlossene/ausstehende/vorgelegte Daten zu speichern (Nullzeitbereich für die Spalte). Auf diese Weise berechnet sql server den teuersten Teil Ihrer Abfrage zum Zeitpunkt des Einfügens. –

+0

Hallo Joel, ich benutze Ansicht zum Abrufen der Statusdaten aus der Datenbank, weil im Service-Desk-System gibt es viele Arten von Aufträgen wie Vorfall, Problem, Aufgabe, Arbeitsauftrag diese Aufträge in verschiedenen Tabellen gespeichert ist, was ich hier tun kann ich erstellen die vier Ansichten für Vorfall, Problem, Aufgabe, Arbeitsauftrag und dann erstellen Sie eine Ansicht für kollektiv alle Informationen von Aufträgen erhalten. In der genannten Abfrage habe ich diese Ansicht zum Abrufen der Daten verwendet. Behalten Sie dieses Szenario und sagen Sie mir dann, wie Sie die Leistung am besten verbessern können. ich –

2

Verwendung:

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] 

Wenn Sie Daten sehen, wo keine verkauft wurden, wirst du haben eine Tabelle der Daten abzuleiten und dann LEFT JOIN die Abfrage auf das oben auf dem Datum basiert.