AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SQL-Code für eine Statistik-Abfrage???
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von romber · begonnen am 7. Dez 2009 · letzter Beitrag vom 8. Dez 2009
Antwort Antwort
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.164 Beiträge
 
Delphi 10 Seattle Professional
 
#1

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

  Alt 7. Dez 2009, 22:19
Datenbank: MS SQL Server • Version: 2008 • Zugriff über: ADO
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.2008and u_kunde_seit <= '31.01.2008');
SET @januar_verlaengerte_vertraege = (SELECT COUNT(*) FROM [VERWALTUNG].[dbo].[KUNDEN] WHERE u_zuletz_verlaengert_am >= '01.01.2008and u_kunde_seit <= '31.01.2008');
SET @januar_gekuendigte_vertraege = (SELECT COUNT(*) FROM [VERWALTUNG].[dbo].[KUNDEN] WHERE u_gekuendigt_am >= '01.01.2008and u_kunde_seit <= '31.01.2008');
SET @januar_stornierte_vertraege = (SELECT COUNT(*) FROM [VERWALTUNG].[dbo].[KUNDEN] WHERE u_storniert_am >= '01.01.2008and 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?
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: SQL-Code für eine Statistik-Abfrage???

  Alt 8. Dez 2009, 04:35
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 '20090101and '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.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.164 Beiträge
 
Delphi 10 Seattle Professional
 
#3

Re: SQL-Code für eine Statistik-Abfrage???

  Alt 8. Dez 2009, 09:12
Vielen Dank! Ich probier's.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz