Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL-Code für eine Statistik-Abfrage??? (https://www.delphipraxis.net/144434-sql-code-fuer-eine-statistik-abfrage.html)

romber 7. Dez 2009 23:19

Datenbank: MS SQL Server • Version: 2008 • Zugriff über: ADO

SQL-Code für eine Statistik-Abfrage???
 
Hallo!

Ich habe z. B. eine Tabelle, in der die Vertragsdaten gespeichert werden. Ich möchte eine kleine Statistik-Tabelle anzeigen, in der für jeden Monat eines Jahres Anzahl der neu abgeschlossenen, verlängerten, gekündigte und stornierten Verträgen drin steht. Also 12 Zeilen und vier Spalten. Am besten sollten die Daten mit einer einzigen Abfrage geladen werden. Und genau da liegt mein Problem. Ich kann ohne Probleme die Daten für jeden einzelnen Monat oder auch für alle Monate abfragen und zurückgeben, aber meine Code liefert immer nur eine einzelne Zeile zurück. Ich würde aber gerne die 12 Zeilen zurückbekommen, die ich dann bequem in einer Schleife durchgehen kann. So generiere ich die Daten für einen bestimmten Monat:

SQL-Code:
DECLARE @januar_neue_vertraege INTEGER;
DECLARE @januar_verlaengerte_vertraege INTEGER;
DECLARE @januar_gekuendigte_vertraege INTEGER;
DECLARE @januar_stornierte_vertraege INTEGER;

SET @januar_neue_vertraege = (SELECT COUNT(*) FROM [VERWALTUNG].[dbo].[KUNDEN] WHERE u_vertragsdatum >= '01.01.2008' and u_kunde_seit <= '31.01.2008');
SET @januar_verlaengerte_vertraege = (SELECT COUNT(*) FROM [VERWALTUNG].[dbo].[KUNDEN] WHERE u_zuletz_verlaengert_am >= '01.01.2008' and u_kunde_seit <= '31.01.2008');
SET @januar_gekuendigte_vertraege = (SELECT COUNT(*) FROM [VERWALTUNG].[dbo].[KUNDEN] WHERE u_gekuendigt_am >= '01.01.2008' and u_kunde_seit <= '31.01.2008');
SET @januar_stornierte_vertraege = (SELECT COUNT(*) FROM [VERWALTUNG].[dbo].[KUNDEN] WHERE u_storniert_am >= '01.01.2008' and u_kunde_seit <= '31.01.2008');

SELECT m01_n = @januar_neue_vertraege,
       m01_v = @januar_verlaengerte_vertraege,
       m01_g = @januar_gekuendigte_vertraege,
       m01_s = @januar_stornierte_vertraege;

Wie bekomme ich nun die Daten für alle Monate in einer Tabelle? Ich habe schon an eine temporäre Tabelle gedacht, der ich in einer Schleife die Daten für jeden Monat hinzufüge und dann ein SELECT ausführe. Ich dachte aber, es gibt nocht eine bessere Methode. Wie mache ich das am besten?

alzaimar 8. Dez 2009 05:35

Re: SQL-Code für eine Statistik-Abfrage???
 
SQL-Code:
Select
  datepart (month, Datum) as Monat,
  Count (Spalte1) as Spalte1Anzahl,
  Count (Spalte2) as Spalte2Anzahl,
  ...
from
  Tabelle
Group by
  datepart (month, Datum)
where Datum between '20090101' and '20091231 23:59:59'
Anzupassen auf deine Tabelle.

Im in der GROUP BY Klausel müssen alle Spalten stehen, nach denen gruppiert wird. In der SELECT - Klausel müssen für alle Spalten, die *nicht* gruppiert werden, Aggregatfunktionen (Summe, Anzahl, Min, Max usw) angegeben werden.

romber 8. Dez 2009 10:12

Re: SQL-Code für eine Statistik-Abfrage???
 
Vielen Dank! Ich probier's.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz