AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Ergänzen aller Monate in Ergebnis einer Access Abfrage

Ergänzen aller Monate in Ergebnis einer Access Abfrage

Ein Thema von Alfonso · begonnen am 5. Jun 2013 · letzter Beitrag vom 6. Jun 2013
Antwort Antwort
Alfonso

Registriert seit: 10. Jan 2006
242 Beiträge
 
Delphi 11 Alexandria
 
#1

Ergänzen aller Monate in Ergebnis einer Access Abfrage

  Alt 5. Jun 2013, 18:53
Datenbank: Access • Version: 2007 • Zugriff über: ADO
Der Titel ist vielleicht etwas irreführend, aber meine Frage ist schwer in einer Zeile zu erklären:
Habe folgende Access-Abfrage:
Code:
SELECT Month([Datum]) AS mm, Sum[Betrag]) AS Total FROM tbl_Rechkopf
GROUP BY Month([Datum]), Year([Datum]) HAVING (Year([Datum])=2013) ORDER BY Month([Datum])
Dieses liefert als Ergebnis z.B.
mmTotal
340
545
1067

Ich möchte aber, dass es mir für alle Monate einen Wert zurückgibt, also Summe 0 für die Monate, die keinen Wert enthalten.
mmTotal
10
20
340
40
545
60
70
80
90
1067
110
120

Gibt es einen Trick, es direkt in SQL ohne Programmierung zu machen?

Gruß
Alfonso
Alfonso
Seit Turbo Pascal 3.0 dabei!
Ewiger Pascal Fan!

Geändert von Alfonso ( 5. Jun 2013 um 21:32 Uhr) Grund: Code korrigiert,
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#2

AW: Ergänzen aller Monate in Ergebnis einer Access Abfrage

  Alt 5. Jun 2013, 21:12
Frage zu schnell quer gelesen. Bitte löschen.

Geändert von jensw_2000 ( 5. Jun 2013 um 23:39 Uhr)
  Mit Zitat antworten Zitat
Alfonso

Registriert seit: 10. Jan 2006
242 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Ergänzen aller Monate in Ergebnis einer Access Abfrage

  Alt 5. Jun 2013, 21:18
Hallo,
danke für deine Antwort, aber ich glaube du hast die Frage falsch verstanden. Ich will nicht eine 0 vorstellen, sondern das der Monat ausgegeben wird, auch wenn keine Summen vorhanden sind.

UDF kann Access leider nicht, wenn ich es von Delphi aufrufe.

Gruß
Alfonso
Alfonso
Seit Turbo Pascal 3.0 dabei!
Ewiger Pascal Fan!
  Mit Zitat antworten Zitat
Alt 5. Jun 2013, 21:25     Erstellt von TBx
Dieser Beitrag wurde von TBx gelöscht. - Grund: Beiträge nicht mehr benötigt
Alt 5. Jun 2013, 21:33     Erstellt von Alfonso
Dieser Beitrag wurde von TBx gelöscht. - Grund: Beiträge nicht mehr benötigt
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#4

AW: Ergänzen aller Monate in Ergebnis einer Access Abfrage

  Alt 5. Jun 2013, 22:34
Du kannst eine Dummytabelle anlegen und Deine Daten LEFT dazu joinen.
Da es gegf. zukünftig auch Anforderungen bis auf Tagesebene geben könnte würde ich eine Datumstabelle z.B. von 1980 - 2050 mit Tagen füllen, wenn man Lust hat kann man gleich noch Kalenderwochen und Feiertagsspalten mit aufnehmen. Eine darauf basierende Monatssicht würde ich als Basis für Deine Abfrage nehmen.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#5

AW: Ergänzen aller Monate in Ergebnis einer Access Abfrage

  Alt 6. Jun 2013, 00:21
Access kennt IMHO keine Loops im SQL Code. Daher wird es nicht ohne Hilfstabellen oder zusätzlichen VBA Code gehen. Bummis Lösung ist super, wenn du vor hast dynamische Zeiträume auszuwerten.

Falls Du immer nur ganze Monate kumulieren möchtest, dann reicht dir eine einfache Hilfstabelle mit einem Integer Feld und 12 Datensätzen (1..12).

Der SQL Code würde dann so aussehen:

Code:
SELECT
  HT.Monat AS mm
 ,Sum(ISNULL(Betrag,0)) AS Total
FROM
  tbl_Rechkopf RK
RIGHT OUTER JOIN Hilfstabelle HT
  ON HT.Monat = Month(RK.Datum)
  OR Month(RK.Datum) IS NULL
GROUP BY
  HT.MONAT
 ,Year(RK.Datum)
HAVING
  (Year(RK.Datum)=2013)
  OR RK.Datum IS NULL --- damit auch Monate selektiert werden, in denen keine Daten in RK vorhanden sind
ORDER BY
  HT.Monat
Untetestet. Habe nur einen MSSQL Server zum "spieien" hier. Access SQL kann etwas abweichen.

Geändert von jensw_2000 ( 6. Jun 2013 um 00:27 Uhr)
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.733 Beiträge
 
Delphi 6 Enterprise
 
#6

AW: Ergänzen aller Monate in Ergebnis einer Access Abfrage

  Alt 6. Jun 2013, 07:49
Wahrscheinlich nicht so performant, geht aber glaub ich auch, ist die Subselect-Variante:
Code:
Select
  D.Monat as MM,
  (
  Select Sum(Betrag) FROM tbl_Rechkopf
  Where Year(Datum) = 2013 and Month(Datum)=D.Monat
  ) as Total
From
  Dummytable D

----------------------
Oder ohne DummyTable:
From
  (
  Select 01 as Monat
  Union All
  Select 02 as Monat
  Union All
  ...
  Select 12 as Monat
  ) D
Ralph
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 15:00 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