Wie erstell ich am einfachsten über eine Abfrage eine Flop-Top liste in MS Access?

...komplette Frage anzeigen

1 Antwort

Wegen einer Abfrage eine Tabelle zu erstellen, macht man nur im äußersten Notfall bei sehr komplexen Problemen, die sonstwie nicht zu lösen wären. Deine Aufgabe gehört zu den ganz einfachen Übungen:

SELECT feld1, feld2, ... feldn FROM tabelle
WHERE ...
ORDER BY feld1 DESC

Die ersten 10 Sätze, die Du hiermit bekommst, sind die Top-10. Wenn Du das DESC weglässt, bekommst die Flop-10.

Für feld1, feld2 usw. setzt die Datenfeder ein, die Du haben willst, bei ORDER BY legst die Reihenfolge fest und gibst das Feld an, wonach Du die Sortierung haben willst (hier feld1).

Für diese Abfrage empfiehlt es sich, auf das zu sortierende Feld je einen Index für aufsteigend und absteigend zu legen.

Warum?  Wenn Du z.B. 10000 Sätze hast und Du willst den mit dem größten oder den kleinsten Wert, muss die Datenbank erst einmal alle Sätze sortieren, um den möglichweise einzigen infrage kommenden Satz zu ermitteln. Das ist nicht gerade effeftiv und kann bei größeren Datenmengen eine Weile dauern. Ist ein Index definiert, erreicht die Datenbank den benötigten Satz auf Anhieb unabhängig von der vorhandenen Datenmenge.

Anmerkung: Für die Sortierung bzw. für den Index können auch mehrere Spalten der Tabelle angegeben werden, auf- oder absteigend gemischt.

Mit der in diesem Beispiel angegeben WHERE-Anweisung kannst Du die
herangezogene Menge definieren, z.B. einen bestimmten Datumsbereich.
Ohne diese Angabe werden alle vorhandenen Sätze berücksichtigt.

Cristian84 24.11.2016, 12:24

Erstmals Danke. Naja das Ding ist n bisschen komplizierter. Ich hab ne Inventur Datenbank. Die Tabelle aus der ich die Abfrage machen möchte wird jährlich gelehrt und neu befühlt. Datensätze variieren zwischen 1500 und 2000 Artikelnummern. Hau ich da jetzt n Index drauf und lösch die im nächsten Jahr beginnt der Index beim letzten Datensatz der letzten Tabelle. Und ich möchte das ja über ne Schaltfläche und nen Textfeld machen :). Und ja ich hab schon mal ne Abfrage erstellt ;) bin aber erst am erlernen und mein f* Boss setzt mich unter Druck  

0
wotan38 24.11.2016, 19:56
@Cristian84

Schwierig ist die Aufgabe nach wie vor nicht. Was den Index betrifft: Den legt man beim Einrichten der Tabelle an oder nachträglich, wenn schon Daten vorhanden sind, geht das auch.
Der Index beginnt auch nicht irgendwo und hört auch nicht irgendwo auf, der passt immer zu den Daten, das macht die Datenbank automatisch. Wenn die Tabelle gelöscht und wieder neu geladen oder geändert wird, wird der Index immer mitgeändet. Frage: Steht der Differenzwert schon in der Tabelle oder muss dieser erst berechnet werden? Im ersten Fall würde ich auf den Differenzwert einen Index legen, im letzten Fall würde ich die Tabelle um dieses Feld erweitern und dann den Index auf dieses Feld legen und dann mit einem Update das neue Feld mit Daten befüllen. Es geht aber auch mit unveränderter Tabelle, nur dann eben ohne Index und die Abfrage dauert etwas länger. Statt des nicht vorhandenen Differenzwertes kann man auch die Formel angeben, und auch danach sortieren.

1
wotan38 24.11.2016, 20:11
@wotan38

Ergänzend dazu:

Wenn Du, wie ursprünglich vorgeschlagen, eine neue Tabelle erstellst: Wozu brauchst eine ID und noch dazu eine mit einem Autowert? Die Datenbank braucht die nicht, auch einen solchen Primärschlüssel nicht, solange Du nicht mehrere Tabellen miteinander verknüpfen willst.

1
Cristian84 25.11.2016, 10:30
@wotan38

Okay, du hast mir deutlich gemacht wie kompliziert und dumm ich bin.

 Frage: Steht der Differenzwert schon in der Tabelle oder muss dieser erst berechnet werden?

Ich hab die Abfrage jetzt über eine schon bestehende Abfrage erstellt in der ich die Differenz schon ermittelt hatte. Hab das jetzt so simple umgesetzt wie du mir das vorgelegt hast allerdings spuckt er mir nicht die Top/Flop 10 sondern 39 Datensätze aus. Habe jetzt bei der WHERE Bedingungen einen Wert eingetragen der das nochmal eingrenzt allerdings hätte ich das schon gerne nach Anzahl sprich die schlechtesten 10. Und was noch viel wichtiger ist, wobei ich dir wieder zeige wie unwissend ich bin, wie die korrekte Syntax  für die negativen Abweichungen ist ?? Hab bisschen was ausgetestet aber geht nöt !

Wozu brauchst eine ID und noch dazu eine mit einem Autowert? Die Datenbank braucht die nicht, auch einen solchen Primärschlüssel nicht, solange Du nicht mehrere Tabellen miteinander verknüpfen willst

Ja ich hab kompliziert gedacht. ich wollte erst Absteigend sortieren und allen einen Autowert geben damit ich in das Kriterium z.B. <10 eingeben kann und somit die Auswahl definierter und variabler ausgespuckt bekomme. Aber eben das geht ja nicht weil die Tabelle aus der ich die Daten habe jedes Jahr neu befühlt wird und der Autowert dann weiter zählt. Und frag nicht weiter ;) ich weiß das war nicht nur umständlich sondern auch dumm.

 

 

 

 

0
Cristian84 25.11.2016, 10:39
@Cristian84

Okay vergiss das was ich mit 39 Datensätzen erwähnt hatte! Einfach vergessen ;)

0
Cristian84 25.11.2016, 11:40
@Cristian84

Vergiss auch

Und was noch viel wichtiger ist, wobei ich dir wieder zeige wie unwissend ich bin, wie die korrekte Syntax  für die negativen Abweichungen ist ?? Hab bisschen was ausgetestet aber geht nöt !

Ich depp hab mich auf ein Abfragen bezogen, bei welcher ich die negativ Werte gefiltert hatte weshalb er mir bei der Abfrage keine negativ Werte ausgegeben konnte. Am besten ich lösche meinen Account ;)

Dankeee und sorry  ;)

 

0
wotan38 25.11.2016, 11:42
@Cristian84

Wie man die Ausgabe datenbankseitig auf die 10 begrenzen kann, weiß ich nicht. Ich mache das Meiste vom Programm aus und da breche ich das Einlesen der Sätze nach der gewünschten Anzahl ab, falls ich die Anzahl begrenzt habe (bei mir ist das meistens nur der erste Satz, den ich benötige). Ich glaube aber, dass ich hier bei anderen Usern schon sowas gesehen habe, weiß nur nicht, ob das  programm- oder datenbankseitig war. Ich benutze auch eine andere Programmiersprache und kenne die hier verwendeten Sprachen nicht im Detail, ich beantworte hier auch nur Fragen zu SQL, da diese Sprache fast überall gleich ist. 

Als dumm solltest Dich nicht bezeichnen, auch wenn Du damit Bescheidenheit signalisierst. Du bist allenfalls noch unerfahren. Die Datenbanktechnik selbst ist geradezu banal. Im Informatikunterricht wird das so kompliziert gemacht, weil das für die Dozenten einfacher ist. Das ist ähnlich wie mit dem Fremdsprachenlernen, wo man sich mit viel Grammatik herumschlagen muss, während bei den Einheimischen schon die Kinder korrekt sprechen können (wenn auch nicht alle), die gar nicht wissen, dass es eine Grammatik gibt. So etwas wie ein Sprachgefühl gibt es auch bei Daten. Ich kann z.B. eine Datenbank aus dem Stegreif konzipieren, wenn ich die Aufgabe kenne (das muss man allerdings). Meine größte Datenbank ist bei einem Kunden von mir installiert und hat momentan 57 Tabellen mit z.T. sehr komplexen Verknüpfungen. Damit wird der gesamte Geschäftsablauf mit 4 Arbeitsplätzen abgewickelt. So wie man das im Informatikunterricht lehrt, würde ich das nie hinbekommen.

0
wotan38 25.11.2016, 11:56
@Cristian84

Du bist auf dem besten Weg Dich erfolgreich in die Datenbanktechnik einzuarbeiten. Eine gesunde Einstellung zu Fehlern, aus denen man nur lernen kann, hilft einem sehr weiter.

0

Was möchtest Du wissen?