MS-Office-Forum
Google
   

Zurück   MS-Office-Forum > Microsoft Access & Datenbanken > SQL
Registrieren Forum Hilfe Alle Foren als gelesen markieren

Banner und Co.

Antworten
Ads Der Renner, 11 Entwicklertools für Access, Tipps & Trick und offene Datenbanken zum einzigartigen Preis.
Themen-Optionen Ansicht
Alt 16.11.2017, 14:00   #1
Heritus
Neuer Benutzer
Neuer Benutzer
Wink Admin : MSSQL - Leere Monate anzeigen

Nach so langer Zeit komme ich also wieder zurück zu meinen Wurzeln und darf nach Jahren mal wieder eine Accessabfrage gestalten.

Ziel ist es, eine Aritkelabfrage zu machen und darzustellen, wieviel Artikel im Monat verkauft wurden.

Die sieht jetzt so aus:

SELECT shopbestand.Artikel, Month(shopverkauf.Eingang) AS EM, Count(*) AS wievielVerkauf
FROM shopverkauf INNER JOIN shopbestand ON shopverkauf.nr = shopbestand.AW_Nr
GROUP BY shopbestand.Artikel, Month(shopverkauf.Eingang), Year(shopbestand.Eingang)
HAVING (((Year(shopbestand.Eingang))>2016));

Allerdings soll ich auch die Monate anzeigen, an denen der Artikel nicht verkauft wurde, dann halt mit der Menge 0

Ich konnte das mal, aber ich kann mich ob der Zeit nicht mehr daran erinnern

Aber bestimmt kann mir das hier jemand erklären

Danke für Eure Mühe
Heritus ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 16.11.2017, 16:12   #2
fraeser
MOF Meister
MOF Meister
Standard

Du meinst bestimmt ISNULL...
https://msdn.microsoft.com/de-de/lib...=sql.120).aspx

__________________

Gruß, Jan

Zitat:

Programmieren und Microsoftail: "Gestern stand ich noch am Abgrund.....heute bin ich einen Schritt weiter....!"

fraeser ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 16.11.2017, 16:34   #3
ebs17
MOF Guru
MOF Guru
Standard

Eine NULL-Behandlung macht erst dann Sinn, wenn man entsprechende Datensätze hat. Fehlende Tage oder Monate kann man nicht aus den vorhandenen Verkäufen herbeizaubern, sondern nur aus einer vollständigen Liste.

Also würde ich eine Kalendertabelle ins Spiel bringen, die die vollständigen Tage bzw. Monate des benötigten Zeitraumes enthält und daran die Verkäufetabelle per OUTER JOIN anbinden.

Zitat:

eine Accessabfrage gestalten

In Jet prüft man SQL-gemäß besser mit IS NULL statt der VBA-Funktion IsNull.

__________________

Ein freundliches Glück Auf!

Eberhard

Abfrageperformance ist kein Geheimnis
SQL ist leicht: {0}:{1}:{2}:{3}:{4}:{5}:{6}:{7}:{8}:{9}:{10}
Dein Dankeschön: DBWiki=>Spende

Geändert von ebs17 (16.11.2017 um 16:40 Uhr).
ebs17 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 16.11.2017, 16:51   #4
hcscherzer
MOF Guru
MOF Guru
Standard

Die Function ISNULL() in TSQL hat ihr Pendant in der Function NZ() in Jet bzw. in VBA.

__________________

Freundlichen Gruß
Hans-Christian
-----------------------------------------
Oft erwünscht, selten beachtet: nach Erledigung des Problems den Thread als erledigt zu markieren
-----------------------------------------
Ich möchte nur Mitglied in einem Verein sein, der Leute wie mich nicht als Mitglied aufnimmt (Groucho Marx).
-----------------------------------------
Ab sofort regelmässig: MOF Stammtisch in Bremen. Näheres hier.
hcscherzer ist gerade online  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 17.11.2017, 12:08   #5
Heritus
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard Kalenderblatt

Grundsätzlich ist das der richtige Ansatz, der mich jedoch leider nicht weiter bringt.
Das Problem ist, das ich keine weiter Tabelle zur Datenbank hinzufügen darf bzw kann.
ISNULL bringt mich nicht weiter, denn wo nichts angezeigt werden kann, kann natürlich auch nichts ausgegeben werden.
Das alles bringt mich also nicht weiter.
Ich bräuchte eine Schleife, die quasi schaut, ob der Monat vom vorhergehenden Monat nur ein Wert entfernt ist und wenn nicht, dann soll er die nicht vorhandenen Monate auffüllen.
Das klingt so einfach, ist aber ne echte Denksportaufgabe für mich.

Am Ende soll es so aussehen
Artikel Monat Anzahl
Hose 1 2
Hose 2 0
Hose 3 12
Hose 4 6
Hose 5 0

etc.
Ich scheitere aber am nicht vorhandenen Datensatz.

Ich fühle mich immer so leer, wenn ich nicht auf die Lösung komme. Kennt ihr das?
Heritus ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 17.11.2017, 12:23   #6
hcscherzer
MOF Guru
MOF Guru
Standard

Zitat:

Ich bräuchte eine Schleife

Sowas kannst Du in einer StoredProcedure mit einem Cursor machen. Wenn Du aber keine Tabelle hinzufügen darfst, dann darfst Du wohl auch keine Prozeduren anlegen.
Aber Du arbeitest in Access, schreibst Du in #1.
Da kannst Du doch eine Prozedur mit einem RecordSet schreiben ...
Oder eine weitere (eigene) Access DB anlegen, in die Di die vorhandene Tabelle importierst und dann parallel eine Kalendertabelle erstellst ...

Zu Deinem Code:
wenn Du nach Jahr > 2016 filterst, dann kannst Du die Gruppierung getrost weglassen. Die brauchst Du nur, wenn der Zeitraum über mehrere Monate geht. Und dann würde ich es auch rumdrehen (erst Jahr, dann Monat) und das Jahr auch im Resultat anzeigen.

Du kannst das mit einer einzigen SELECT Abfrage imho nicht lösen.
Man kann zwar mit einer Unterabfrage, in der man eine zweite Instanz der Tabelle dazujoint, prüfen, ob es im nächsten Datensatz auch den nächsten Monat gibt, aber dieses Ergebnis kann ich dann auch wieder nur im aktuellen Monat ausgeben. Der Monat, der nicht vorhanden ist, kommt nicht "von selbst" ins ResultSet.

Zitat: von Eberhard

Fehlende Tage oder Monate kann man nicht aus den vorhandenen Verkäufen herbeizaubern

__________________

Freundlichen Gruß
Hans-Christian
-----------------------------------------
Oft erwünscht, selten beachtet: nach Erledigung des Problems den Thread als erledigt zu markieren
-----------------------------------------
Ich möchte nur Mitglied in einem Verein sein, der Leute wie mich nicht als Mitglied aufnimmt (Groucho Marx).
-----------------------------------------
Ab sofort regelmässig: MOF Stammtisch in Bremen. Näheres hier.

Geändert von hcscherzer (17.11.2017 um 12:28 Uhr).
hcscherzer ist gerade online  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 17.11.2017, 13:29   #7
ebs17
MOF Guru
MOF Guru
Standard

Zitat:

Das Problem ist, das ich keine weiter Tabelle zur Datenbank hinzufügen darf bzw kann.

Immer wieder bemerkenswert, wenn Problemlöser mit "überrragenden" Kompetenzen ausgestattet sind.

Eine verknüpfte Tabelle ist auch nicht drin?

Zitat:

ob der Monat vom vorhergehenden Monat nur ein Wert entfernt ist und wenn nicht, dann soll er die nicht vorhandenen Monate auffüllen

In Access/Jet/VBA geht das in eine bestehende Tabelle (die Du so nicht hast) oder in ein Disconnected Recordset. Der Umgang mit letzterem dürfte eine besondere Herausforderung sein angesichts des Stils der gezeigten SQL-Anweisung.

__________________

Ein freundliches Glück Auf!

Eberhard

Abfrageperformance ist kein Geheimnis
SQL ist leicht: {0}:{1}:{2}:{3}:{4}:{5}:{6}:{7}:{8}:{9}:{10}
Dein Dankeschön: DBWiki=>Spende

Geändert von ebs17 (17.11.2017 um 13:53 Uhr).
ebs17 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 17.11.2017, 14:37   #8
fraeser
MOF Meister
MOF Meister
Standard

Zwischenfrage:
1. Du hast (#1) shopbestand.Eingang UND
shopverkauf.Eingang!
Wie soll ich das verstehen?
2. Willst/musst Du es in Access/VBA oder auf einem SQL-Server (sp) lösen?

__________________

Gruß, Jan

Zitat:

Programmieren und Microsoftail: "Gestern stand ich noch am Abgrund.....heute bin ich einen Schritt weiter....!"

fraeser ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 17.11.2017, 21:36   #9
Heritus
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Zitat: von fraeser Beitrag anzeigen

Zwischenfrage:
1. Du hast (#1) shopbestand.Eingang UND
shopverkauf.Eingang!
Wie soll ich das verstehen?

Shopbestand sind alle Artikel, die es in dem Shop gibt.
Shopverkauf besteht aus dem Auffüllen des Bestandes und dem Verkauf der Artikel.
Das ist aber nur ein Beispiel, in der echten DB geht es um komplexere Prozesse.

Zitat: von fraeser Beitrag anzeigen

2. Willst/musst Du es in Access/VBA oder auf einem SQL-Server (sp) lösen?

Also die DB ist eine MySQL auf die ich lesend Zugriff habe. Das Problem muss ich irgendwie lösen und dann die Daten in einer Excel-Tabelle anbieten.

Aber ohne leere Monate bekomme ich die vorgegebene Formatierung nicht hin, da die leere Monate ja nicht existieren und es zudem auch passieren könnte, dass im ganzen Jahr gar keine Hose verkauft wurde. Dann muss die Hose eben 12 mal (Monate) 0 anzeigen.
Aber jetzt verkompliziere ich die ursprüngliche Frage.

GlG
Heritus ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 17.11.2017, 21:51   #10
ebs17
MOF Guru
MOF Guru
Standard

Zitat:

... und dann die Daten in einer Excel-Tabelle anbieten

In Excel gibt auch Tabellen, und man kann auch darin SQL- und VBA-Aktionen machen, also sicher durchaus die Fehlmonate dort ergänzen.

Zitat:

eine Accessabfrage gestalten

Welche Rolle spielt Access überhaupt dabei?

__________________

Ein freundliches Glück Auf!

Eberhard

Abfrageperformance ist kein Geheimnis
SQL ist leicht: {0}:{1}:{2}:{3}:{4}:{5}:{6}:{7}:{8}:{9}:{10}
Dein Dankeschön: DBWiki=>Spende
ebs17 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 17.11.2017, 23:34   #11
hcscherzer
MOF Guru
MOF Guru
Standard

Zitat: von Heritus

Also die DB ist eine MySQL auf die ich lesend Zugriff habe.

Dann sollte es doch kein Problem sein, die Daten in eine lokale Access-DB zu importieren.
Dort erstellst Du die Kalendertabelle.
Dann erstellst Du eine Abfrage, die die importierte Tabelle per RIGHT OUTER JOIN mit der Kalendertabelle verbindet.
Und da hast Du dann für alle Tage oder Monate entweder den passenden Datensatz aus der importierten Tabelle, oder eben zum fraglichen Tag oder Monat NULL.

Und das ResultSet der Abfrage exportierst Du nach Excel.

__________________

Freundlichen Gruß
Hans-Christian
-----------------------------------------
Oft erwünscht, selten beachtet: nach Erledigung des Problems den Thread als erledigt zu markieren
-----------------------------------------
Ich möchte nur Mitglied in einem Verein sein, der Leute wie mich nicht als Mitglied aufnimmt (Groucho Marx).
-----------------------------------------
Ab sofort regelmässig: MOF Stammtisch in Bremen. Näheres hier.
hcscherzer ist gerade online  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 19.11.2017, 22:28   #12
sonic8
MOF Profi
MOF Profi
Standard

Zitat: von Heritus Beitrag anzeigen

Also die DB ist eine MySQL auf die ich lesend Zugriff habe.

Also "schön" geht anders, aber es ist ja bekannt was der Teufel in der Not tut...
Hier ist eine virtuelle Kalendertabelle:
Code:

SELECT Monat, Jahr 
FROM (
	SELECT 1 AS Monat
	UNION ALL
	SELECT 2 AS Monat
	UNION ALL
	SELECT 3 AS Monat
	UNION ALL
	SELECT 4 AS Monat
	UNION ALL
	SELECT 5 AS Monat
	UNION ALL
	SELECT 6 AS Monat
	UNION ALL
	SELECT 7 AS Monat
	UNION ALL
	SELECT 8 AS Monat
	UNION ALL
	SELECT 9 AS Monat
	UNION ALL
	SELECT 10 AS Monat
	UNION ALL
	SELECT 11 AS Monat
	UNION ALL
	SELECT 12 AS Monat
  ) AS Monate
CROSS JOIN  (
	SELECT 2015 AS Jahr
	UNION ALL
	SELECT 2016 AS Jahr
	UNION ALL
	SELECT 2017 AS Jahr
	UNION ALL
	SELECT 2018 AS Jahr
) AS Jahre
sonic8 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Ads
Antworten


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Besucher: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist An.
Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:06 Uhr.


Partner und Co.
Access-Paradies -Alles rund um die Datenbank Microsoft Access -Code -Programme-Tools -Tipps   Kostenlose Tipps & Tricks, Downloads und Programme   www.kulpa-online.com - Tipps - Tricks - Tutorials - Meinungen - Downloads uvm...   vb@rchiv · Willkommen in der Welt der VB Programmierung   Access-Garhammer - Hier finden Sie jede Menge Beispiel-Datenbanken zu Access und mehr ...   mcseboard.de   Die Top Seite für Excel-VBA-Makros uvm.

Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

Copyright ©2000-2010 MS-Office-Forum. Alle Rechte vorbehalten.
Copyright ©Design: Manuela Kulpa ©Rechte: Günther Kramer
Eine Verwendung der Inhalte in anderen Publikationen, auch auszugsweise,
ist ohne ausdrückliche Zustimmung der Autoren nicht gestattet.
Beachten Sie bitte auch unsere Nutzungsbedingungen.