collapse

* Benutzer Info

 
 
Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?

* Wer ist Online

  • Punkt Gäste: 68
  • Punkt Versteckte: 0
  • Punkt Mitglieder: 3
  • Punkt Benutzer Online:

* Forenstatistik

  • stats Mitglieder insgesamt: 13976
  • stats Beiträge insgesamt: 66566
  • stats Themen insgesamt: 8973
  • stats Kategorien insgesamt: 5
  • stats Boards insgesamt: 17
  • stats Am meisten online: 415

Autor Thema: SQL-Sicht (mit berechneten Feldern in der gleichen Sicht weiterrechnen)  (Gelesen 10754 mal)

Offline ellinho

  • Access-Profi
  • **
  • Beiträge: 131
Hallo zusammen.
Ich hätte da mal eine grundlegende Frage :
In einer Sicht rechne ich mit zwei Tabellenfeldern z.B. dbo.Mitarbeiter.Stundenlohn*dbo.geleisteteStunden.Stunden AS Lohn ........
und möchte gerne in der gleichen Sicht mit dem soeben berechneten Feld "Lohn" weiterrechnen. z.B. Lohn-dbo.Vorschüsse.Vorschuss AS ausbezahlterBetrag........
Nach meinem bisherigen Verständnis muss ich dann immer die komplette Berechnung des Feldes, das eigentlich bereits berechnet wurde, wieder mit einbeziehen. In diesem Fall z.B. (dbo.Mitarbeiter.Stundenlohn*dbo.geleisteteStunden.Stunden)-dbo.Vorschüsse.Vorschuss AS ausbezahlter Betrag oder für die Errechnung des ausbezahlten Betrages eine neue Sicht erstellen.
Meine Frage :
Gibt es die Möglichkeit, mit bereits berechneten Feldern (wie z.B. hier das Feld "Lohn") in der Form Lohn-dbo.Vorschüsse.Vorschuss AS ausbezahlterBetrag weiterzurechnen ? Es ist ansonsten in einigen Sichten doch sehr kompliziert aufgebaut wenn eine sehr umfangreiche Berechnung eines Feldes mehrmals durchgeführt wird und sicherlich dann auch schlecht für die Performance und eigentlich sollte es doch möglich sein, viele Sachen in eine Sicht zu packen.

Gruß
Karsten
« Letzte Änderung: März 05, 2012, 11:15:51 von ellinho »
 

Offline database

  • AoM Team
  • Access Guru
  • *****
  • Beiträge: 4178
Hallo,

sieh mal hier....

Berechnungen und Aliase in Views
« Letzte Änderung: März 06, 2012, 11:24:09 von database »
Viele Grüße
Peter

Tipps und Links:
---------------------------------------------------------
1. http://www.donkarl.com
2. http://www.access-entwicklerbuch.de/2007/index.php?page=buch
3. http://www.xlam.ch/pos/rules.htm
3.a Reservierte Worte
4. http://www.functionx.com/vbaccess/index.htm
5. http://www.dbwiki.net

Nicht vergessen: Jede(r) hat mal klein angefangen!
Bitte keine Fragen per PN senden - Fragen gehören ins Forum!
 

Offline Bitsqueezer

  • Newbie
  • Beiträge: 30
    • Bitsqueezers Access Downloads
Hallo Karsten,

ja, das geht, wenn man einfach CTEs einsetzt. In Common Table Expressions kann man Queries sozusagen staffeln, da kann man eine Menge mit machen. Beispiel:

Code: (vb) [Auswählen]
WITH qryBerechnung AS
(
   SELECT Anzahl * Wert AS ZeilenSumme FROM Bestelldetails
    WHERE BestellID = 4711
), qryErgebnis AS
(
   SELECT ZeilenSumme, Artikelname, ZeilenSumme * 19 / 100 AS MwSt
     FROM qryBerechnung
)
SELECT * FROM qryErgebnis

Solche Verkettungen sind darüber hinaus auch sehr schnell, denn während qryBerechnung erst die ganze Tabelle einliest, um dann die ausgefilterten Datensätze zu entfernen und ein Ergebnisset zu bilden, kann die zweite Abfrage bereits auf die gefilterte Liste zugreifen. Wenn qryErgebnis jetzt auch noch weitere Filter setzen würde, hätte die letzte Abfrage dann wiederum noch weniger "zu tun".

Wenn Du einmal mit CTEs gearbeitet hast, willst Du sie nicht mehr missen. Man kann das gleiche auch mit verschachtelten Unterabfragen machen, ist aber bei weitem nicht so gut lesbar/wartbar.

Gruß

Christian
 

Offline ellinho

  • Access-Profi
  • **
  • Beiträge: 131
Danke Christian für den Tipp.

Werde es bei Gelegenheit mal ausprobieren.


Gruß
Karsten
 

Offline ellinho

  • Access-Profi
  • **
  • Beiträge: 131
Hallo Christian. Wie muss ich den Aufbau verstehen ? Ich rechne nun quasi im SELECT-Bereich der Sicht die ersten beiden Werte normal aus (Sollstundengesamt und Abwesenheitsstunden). Wenn ich jetzt als nächstes das Ergebnis der Sollstundennetto ausrechnen lassen möchte (Sollstundengesamt-Abwesenheitsstunden). Wie sähe dabei die Syntax aus ? Das habe ich noch nicht ganz verstanden ?

Gruß
Karsten
« Letzte Änderung: März 10, 2012, 10:32:33 von ellinho »
 

Offline Bitsqueezer

  • Newbie
  • Beiträge: 30
    • Bitsqueezers Access Downloads
Hallo,

wie in dem gezeigten Beispiel: die erste Abfrage liefert Sollstundengesamt und Abwesenheitsstunden und alle weiteren berechneten Spalten, die sich direkt aus den Feldern der Basistabelle/Abfrage berechnen lassen.
In der nächsten Abfrage beziehst Du Dich auf den Namen der ersten und hast damit alle Aliase aus der ersten Abfrage zur Verfügung und kannst damit nun weitere Berechnungen anstellen usw. Die gezeigte Verkettung verwendet zwei Abfragen und eine Gesamtabfrage am Schluß, das ist aber nur ein Beispiel, um zu zeigen, daß jede folgende Abfrage die vorhergehende(n) Abfragen verwenden kann (auch gemixt und gejoint natürlich). Es genügt aber auch eine einzige Abfrage mit einer Gesamtabfrage am Ende, das Beispiel sollte nur die mögliche Kaskadierung zeigen.

Gruß

Christian
 

Offline ellinho

  • Access-Profi
  • **
  • Beiträge: 131
Hallo Christian.
Danke für Deine Ausführungen. Ehrlich gesagt ist mir die Geschichte zu kompliziert bei meinen umfangreichen Abfragen. Da bekomme ich die Syntax nicht hin. Habe es probiert, aber es hat leider nicht geklappt. Da bin ich wahrscheinlich zu viel Newbie. Habe es so gemacht wie bisher und setze das Thema mal auf gelöst, da Du den Lösungsansatz ja geliefert hast.
Danke nochmal.

Gruß
Karsten
 

Offline Bitsqueezer

  • Newbie
  • Beiträge: 30
    • Bitsqueezers Access Downloads
Hallo Karsten,

was ist daran kompliziert? Du hast eine Abfrage, die Spalten zurückliefert, ein paar davon berechnet. Jeder berechneten Spalte wird ein Alias zugewiesen. In der nächsten Abfrage in der CTE-Liste kannst Du nun auf diese Abfrage wie auf eine Tabelle mit deren Spalten und Spaltenaliasen zugreifen. Usw. mit jeder weiteren, denn Abfrage 2 kann wieder neue Aliase vergeben, die dann ab Abfrage 3 genutzt werden können usw.

Ohne Deine Abfrage gesehen zu haben, kann man Dir da auch nicht viel mehr zu sagen.

Gruß

Christian
 

Offline ellinho

  • Access-Profi
  • **
  • Beiträge: 131
Danke Christian.

Habe es, wie gesagt, erst mal anders gemacht, da ich da nicht direkt durchgeblickt habe.
Werde mich aber in einer ruhigen Minute mal damit befassen. Bin leider noch nicht dazu gekommen.

Gruß
Karsten