2017-12-19 13 views
0

Ich muss ein Liniendiagramm anzeigen, das die Tage des Monats von 1 bis 31 anzeigt. Auf dem Diagramm muss eine Zeile mit der durchschnittlichen Anzahl der pro Tag verwendeten SMS-Guthaben angezeigt werden von allen Monaten.SQL Server: Durchschnitt pro Tag aller Monate

Meine Daten sieht wie folgt aus:

**STATUS  StatusDate** 
DELIVRD  2015-03-16 11:57:47.000 
DELIVRD  2015-04-16 13:02:57.000 
DELIVRD  2015-03-20 16:02:08.000 
DELIVRD  2015-04-20 16:08:41.000 
DELIVRD  2015-04-20 16:35:11.000 
DELIVRD  2015-03-21 07:43:49.000 
DELIVRD  2015-04-21 08:20:09.000 
DELIVRD  2015-03-21 11:12:00.000 
DELIVRD  2015-04-21 11:20:13.000 
DELIVRD  2015-04-21 12:51:26.000 

Es braucht Linie zeichnen sich die durchschnittliche Anzahl des 16. aller Monate zeigt, etc ..

Ich bin mit Entity Framework und C#. Die JQuery-Seite verwendet ChartJS aus dem Bootstrap-Admin-Thema.

Dies ist, was das Ergebnis aussehen soll: enter image description here

+1

Nicht wirklich eine SQL Server Frage. Wählen Sie ein Berichtspaket (Crystal Reports, Excel, etc.) und verwenden Sie es –

+0

SQL Server selbst nicht zu chartern. Sie müssen dafür schreiben und Anwendung oder ein Reporting-Tool verwenden. – Magnus

+0

im Entwickeln dieser als eine Webanwendung und wir verwenden keine Crystal Reports. Ich verwende das Bootstrap-Thema mit ChartJS. – Orion

Antwort

1

Hier eine Abfrage ist, dass Ihre Daten für Tag zusammenfassen wird, bereit für den gewünschten Berichte Paket Einspeisung in:

WITH t AS(
SELECT 
    CAST(statusdate as date) as da, 
    COUNT(CASE WHEN status = 'DELIVRD' THEN 1 END) as count_delivered, 
    COUNT(CASE WHEN status = 'FAILED' THEN 1 END) as count_failed -- or similar etc 
FROM 
    your_table 
GROUP BY 
    CAST(statusdate as date) 
) 

SELECT 
    da, 
    AVG(count_delivered), 
    AVG(count_failed) 
FROM 
    t 
GROUP BY 
    da 
+0

Das gibt mir die Tage getrennt. Ich suche nach allen 16ern als 1 Durchschnitt für alle Monate. Wird ein Bild enthalten, um dies besser zu veranschaulichen. – Orion

+0

Ich habe meine Frage bearbeitet, um zu zeigen, wie das Ergebnis aussehen sollte – Orion

+0

Nur die 16tel? Wie wird das die Grafik zeichnen, die Sie für andere Tage, nicht für den 16., gezeichnet haben? –

1

Wollen Sie so ähnlich;

select DATEPART(DAY,StatusDateD) as [Day], AVG([count]) from (
select 
cast(StatusDate as date) as StatusDateD, 
count(*) as [count] 
from Table 
group by cast(StatusDate as date) 
) Records group by DATEPART(DAY,StatusDateD) 
order by [Day] 
+0

JA! das ist was ich suche! :) Vielen Dank. Versuchen Sie, einen Plan mit Ihrem Code zu erstellen. Vielen Dank! – Orion

+0

Gern geschehen. Bitte markieren Sie die Frage als akzeptiert, wenn sie funktioniert. – lucky

+0

Haben Sie es getan. Wow, du warst schnell mit deiner Lösung. Danke nochmal. – Orion

Verwandte Themen