Accessbericht via SQL

…ein freundliches „Hallo“ allen, die sich mit SQL auskennen.

Ich bastle gerade einen Bericht, in dem ich die Umsatzsumme des Mitarbeiters mit der Personalnr „1“ (Spalte) aus der Tabelle „Personal“ für die im Januar verkauften Produkte aus der Tabelle „Artikel“ mit der Spalte „Einzelpreis“ multipliziere.

oder einfacher:

Ich habe drei Tabellen:

  1. Personal => Spalten: Personalnr …
  2. Artikel => Spalten: Artikel-Nr,Einzelpreis …
  3. Kundentermine => Spalten: Personalnr, Datum, Artikel-Nr…

Ich möchte den Umsatz des MA 1 für Jan aus der Multiplikation der Kundentermine die von 1 getätigt wurde mal dem Einzelpreis der Tabelle Artikel errechnen.

Kann jemand helfen ?
Christian

SELECT Pers.Personalnr,SUM(Art.Einzelpreis)
FROM Personal as Pers
LEFT JOIN Kundentermine as KuTe
ON Pers.Personalnr = KuTe.Personalnr
LEFT JOIN Artikel as Art
ON KuTe.Artikel-Nr = Art.Artikel-Nr
WHERE KuTe.Datum > DATE(‚01.01.2010‘)
and KuTe.Datum

Hallo RakonDark,

vielen Dank, dass Du dich damit beschäftigt hast.

Leider stimmt die Syntax noch nicht. Ich vermute dass Du Abkürzungen verwendet hast.

Fehlermeldung:Syntaxfehler (fehlender Operator) in Abfrageausdruck’Pers.Personalnr = KuTe.Personalnr
LEFT JOIN Artikel as Art
ON KuTe.Artikel-Nr = Art.Artikel-Nr’.

Kannst Du das nochmal ohne Abkürzungen ? - Vielleicht verstehe auch dann endlich.

Gruß Christian

Hallöle…

SELECT Pers.Personalnr,SUM(Art.Einzelpreis)
FROM Personal as Pers
LEFT JOIN Kundentermine as KuTe
ON Pers.Personalnr = KuTe.Personalnr
LEFT JOIN Artikel as Art
ON KuTe.Artikel-Nr = Art.Artikel-Nr
WHERE KuTe.Datum > DATE(‚01.01.2010‘)
and KuTe.Datum From Personal as Pers. Dh. du kannst die Tabelle über Pers ansprechen und musst nicht so viel schreiben (hier also Personal)
Die Abkürzungen sind sinnvoll, weil man bei längerem Code ne Menge Zeit sparen kann. Hier siehst du immer wieder ein Tabellenname ‚as‘ Tabellenkürzel. Hilft dir das weiter?
Leider finde ich hier keinen Fehler…
Grüßl

Hab ich verstanden.
Anscheinend mach da wohl etwas ganz gehörig falsch.
Ich dachte, wenn ich Deinen Code nehme und in eine Abfrage als SQL einsetze, dann würde ich eine einwandfreie Abfrage erhalten.

Aber: „Pustekuchen !“

Nehme ich Den Code und kopiere ihn in die Steuerelementeigenschaft eines ungebundenen Textfeldes in meinem Bericht, bekomme ich auch nur die Meldung #Name?. Hast Du noch eine Idee, woran das liegt ?

Christian

[ot] sou gifft datt nix
Moin, Christian,

Aber: „Pustekuchen !“

hilf uns beim Helfen und sag nicht „Pustekuchen !“, sondern erzähl, was da passiert. Das ist eine simple, na ja, ein bisschen komplexe SQL-Abfrage.

Gruß Ralf

Hallo Ralf,

ich habe wie beschrieben die drei Tabellen mit den beschriebenen Spalten.
Ich möchte nun in einem Bericht möglichtst aus der Tabelle Kundentermine auswerten, welcher Mitarbeiter aus der Tabelle Personal (Spalte PersonalNr) wieviele Kundentermine (Anzahl) in den einzelnen Monaten gemacht hat und welchen Erlös (Tabelle Artikel=> Spalte Einzelpreis) der Mitarbeiter in den jeweiligen Monaten erwirtschaftet hat.

Gruß Christian

Hi Christian,

was Du möchtest, habe ich schon verstanden. Was immer noch fehlt, ist der Grund, warum die Abfrage nicht klappt - Syntaxfehler, Treffermenge leer, ganz was anderes?

Gruß Ralf

Hallo Ralf,

Also es erscheint wenn ich eine Abfrage mit dem folgenden SQL konstruiere:
SELECT Pers.Personalnr,SUM(Art.Einzelpreis)
FROM Personal as Pers
LEFT JOIN Kundentermine as KuTe
ON Pers.Personalnr = KuTe.Personalnr
LEFT JOIN Artikel as Art
ON KuTe.Artikel-Nr = Art.Artikel-Nr
WHERE KuTe.Datum > DATE(‚01.01.2010‘)
and KuTe.Datum

hmm, also was mir schonmal übel aufällt Feldnamen
Artikel-Nr , ist weder in `` eingebettet , es konnte ja wohl auch heissen

Artikel - Nr

ich selber benutze solche feldnamen nicht , und wenn dann muss man die halt mal in ``setzen, damit das was da als feldnamen steht nicht anders interpretiert wird.

SELECT 2-3 FROM tabelle2-3

ist klar oder, tabelle2 - 3 ist was anderes als

SELECT 2-3 FROM tabelle2-3

Moin, Christian,

ich hab’s in Access mit leichten Änderungen nachgebaut:

  1. Bindestrich aus Namen entfernt, ob’s das braucht oder nicht

  2. Date entfernt, habe keine Access-Entsprechnung gefunden

  3. Alle 3 Tabellen in die from-Klausel genommen

  4. Joins durch Where-Klauseln ersetzt

    SELECT Pers.Personalnr, Sum(Art.Einzelpreis) AS [Summe von Einzelpreis]
    FROM Personal AS Pers, Kundentermine AS KuTe, Artikel AS Art
    WHERE Pers.Personalnr=KuTe.Personalnr
    And Pers.Personalnr=1
    AND KuTe.Artikelnr=Art.ArtikelNr
    AND KuTe.Datum>‚01.01.2010‘
    And KuTe.Datum
    Läuft. Ich glaube, Punkt 3 war das Wesentliche.

    Gruß Ralf

SELECT Pers.Personalnr, Sum(Art.Einzelpreis) AS [Summe von
Einzelpreis]
FROM Personal AS Pers, Kundentermine AS KuTe, Artikel AS Art

ich will ja nix sagen aber das ist ja eine unendlich grosse datenmenge die da erzeugt wird. da wird PErosnal mit jedem Kundentermin mit jedem Artikel verknüpft , das echt ein böser querry . Sobald die Datenmengen gross werden wirds unbrauchbar.

JOINS haben ihren sinn , sie einfach wegzulassen ist brutal und nur bei winzigen datenmengen schlau.

…Ihr habt ja recht, wenn Ihr gleich groß denkt und joins verwenden wollt. Aber das ist für einen FrisierSalon mit ca. 10 Angestellten. Also echt überschaubar.

Ich bekomme aber Schwierigkeiten bei den Kriterien !

Ich hab jetzt folgendes versucht einzugeben (Spaltennamen Berichtigt)

SELECT Pers.PersonalNr, Sum(Art.Einzelpreis) AS [Summe von Einzelpreis]
FROM Personal AS Pers, Kundentermine AS KuTe, Artikel AS Art
WHERE Pers.PersonalNr=KuTe.PersonalNr
And Pers.PersonalNr=1
AND KuTe.ArtikelNr=Art.ArtikelNr
AND KuTe.Datum>‚01.01.2010‘
And KuTe.Datum

Hi RakonDark,

ich will ja nix sagen

will ich auch nicht, muss ich aber: Der Optimizer strickt aus einer Where…and…and genau das, was Du mit den Joins machst. Besser gesagt, das Where…and…and ist ein (resp. zwei) Join, auch wenn Du es nicht erkennst.

Gruß Ralf

Hi Christian,

Liegt das vielleicht am Datumsformat ?

nichts soll Dich abhalten, die DBMS-spezifische Date-Funktion anzuwenden - in Access finde ich die passende gerade nicht.

Gruß Ralf

Hi Ralf,

nichts soll Dich abhalten, die DBMS-spezifische Date-Funktion
anzuwenden - in Access finde ich die passende gerade nicht.

Was heißt DBMS-spezifisch ? Ich habe in der MS Hilfe den Ausdruck nicht finden können.

Ich meinte mit dem Datumsformat eigentlich die KriterienZeile in der SQL-Anweisung.

AND KuTe.Datum>‚01.01.2010‘
And KuTe.Datum

Hi Christian,

AND KuTe.Datum>‚01.01.2010‘
And KuTe.Datum