Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Anzahl summiert aus zwei Spalten

Begonnen von BananaDealer, Dezember 05, 2017, 10:40:30

⏪ vorheriges - nächstes ⏩

BananaDealer

Hallo Leute,

ich habe folgende Problematik:

In einer Datentabelle sind den Datensätzen unter vielen anderen auch zwei Spalten mit Eigenschaft 1 und Eigenschaft 2 zugeordnet. Diese beziehen ihre möglichen Werte aus dem selben Pool, nur kann halt einem Datensatz bis zu zwei Eigenschaften zugeordnet werden.

Mit einer Abfrage sollen diese Eigenschaften nun ausgezählt werden und bestenfalls noch nach einer dritten Spalte sortiert werden.

Also genauer: Access soll die Anzahl der Eigenschaften aus beiden Spalten auszählen, ohne zu schauen, ob Werte gleich sind oder eine Beziehung haben (Sprich so auszählen, als ob es aus einer Spalte wäre.) Gruppiere diese Summen und Eigenschaften nach verschiedenen Standorten.

Beispiel:
Standort       Eigenschaft 1          Eigenschaft 2
A                  grün                       blau
B                  gelb                       grün
A                  blau                       grün
C                  rot                         gelb
C                  grün                       rot

Ergebnis:

       grün     blau     gelb     rot
A       2           2          0       0

B       1           0          1       0

C       1           0           1       2

Ich hoffe alles, ist verständlich :D Am besten wäre, alles ohne Code zu machen, sofern möglich.

Vielen Dank und beste Grüße

BananaDealer

MzKlMu

Hallo,
die beste Lösung wäre die Tabelle umzubauen (normalisiert). So sollte das aussehen:
Standort       Eigenschaft 
A                  grün                       
A                  blau
B                  gelb                       
B                  grün
A                  blau                       
A                  grün
C                  rot                         
C                  gelb
C                  grün                       
C                  rot

Das wäre dann der für eine Datenbank korrekte Aufbau.
Dann wäre Dein Vorhaben ein Kinderspiel und die gewünschte Darstellung lässt sich über eine Kreuztabellenabfrage erreichen. Ohne VBA Code.

PS:
Diese erfundenen abstrakten Beispiele gehen meist an der Realität vorbei und erfordern oft mehr Rückfragen, weil dann nach auf dem Beispiel beruhenden Vorschlägen ein Ja, aber .... kommt.
Gruß Klaus

BananaDealer

Hallo Klaus,

leider ist dies nicht möglich. Es wird eine Datentabelle aus Excel importiert, die unter ca. zehn anderen die besagten zwei Spalten besitzt. Diese zwei Spalten zeichnen bis zu zwei verschiedene Eigenschaften (genauer sind es Fehlerschwerpunkte, aber eigentlich unerheblich) aus, welche nicht zu einer Spalte zusammengefasst werden können. Diese beiden Spalten werden aber aus ein und derselben Background Tabelle gefüttert (diese ist eine andere Datei und verknüpft; quasi eine Basistabelle mit allen möglichen Fehlerschwerpunkten) und besitzen den gleichen Pool an möglichen Werten. Nun soll eine Abfrage durch diese beide Spalten gehen und die Anzahl der Fehlerschwerpunkte gruppiert ausgeben.

Ich hoffe, das macht es deutlicher.

MzKlMu

Hallo,
der gezeigte Aufbau muss für Dein Vorhaben sein. Access erfordert einen normalisierten Aufbau der Tabelle. Verlinke die Exceltabelle und importiere die Daten mit 2 Anfügeabfragen in die vorgefertigte Accesstabelle obiger Struktur.

Die Alternative wäre mit einer Unionabfrage diese Struktur zu erzeugen und auf die Union dann die Kreuztabellenabfrage aufzubauen. Aber das halte ich für noch aufwendiger.

Wahrscheinlich ist aber noch mehr Aufwand notwendig, denn die verbleibenden restlichen 8 Felder müssen auch noch mindestens in eine weitere Tabelle überführt werden.
Gruß Klaus

BananaDealer

Hallo,
das Problem ist, dass pro Datensatz eine Vorgangsnummer vergeben wurde. Diesem Vorgang können, sofern er fehlerhaft war, bis zu zwei Fehlerpunkte zugeordnet werden. Bspw. eine falsche Adressierung und eine zu späte Bearbeitung. Beide Fehler werden separat eingetragen (in die zwei Spalten). Normalisiert man die Tabelle nach deiner Idee, hätte ich für diesen Vorgang zwei Datensätze, welche sich nur in den Fehlerpunkten unterscheiden. Für den logischen Aufbau im System ist aber nur ein Datensatz pro Vorgang zwingend notwendig.

Gibt es da keine Möglichkeit? Ich habe irgendwas mit dem UNION Befehl im Hinterkopf. Leider ist diesbezüglich alles nur sehr wage.

Danke und Grüße

MzKlMu

Hallo,
UNION hatte ich ja schon erwähnt, aber auch dann entstehen 2 Datensätze für je Vorgang.

ZitatFür den logischen Aufbau im System ist aber nur ein Datensatz pro Vorgang zwingend notwendig.
Das ist ein Trugschluss. In der erwähnten Kreuztabelle siehst Du nur einen Vorgang.

Übrigens, wie ich es bereits angedeutet habe wird auch für den eigentlichen Vorgang eine Tabelle benötigt.

Du darfst Access nicht mit Excel vergleichen. Access erfordert einen völlig anderen Aufbau der Tabellen. Man in den seltensten Fällen eine Exceltabelle direkt in Access verwenden.


Gruß Klaus

BananaDealer

Vielen Dank schon einmal für deine Mühe!
Der Aufbau der Tabelle ist für Access leider wirklich unpraktisch. Nur leider kann ich an diesem wirklich nichts ändern. Der selbe Vorgang darf nicht als doppelter Datensatz eingetragen werden, sonst meckert das System an anderer Stelle.

Hättest du eine Idee, wie ich eine einfache Union-Abfrage mache, in der mir nur die Fehlerpunkte und Anzahl ausgegeben wird, ausgelesen aus den beiden Spalten?

MzKlMu

Hallo,
die Union macht auch diese doppelten Vorgänge.
Aber das spielt doch keine Rolle. Du brauchst doch diese Tabelle nur für die Auswertung.

Zitatsonst meckert das System an anderer Stelle
welches System ist das, das da meckert ?
Gruß Klaus

Lachtaube

Hier ist ein funktionierender Fiddle.

PS: Es mag sein, dass Access keine Kreuztabellenabfrage basierend auf einer Vereinigungsabfrage mag. Dann muß man halt das Ergebnis der Vereinigungsabfrage zwischenspeichern (z. Bsp. als Text exportieren und verknüpfen).
Grüße von der (⌒▽⌒)

BananaDealer

Kann ich in SQL nicht festlegen, zähle die Werte über zwei Spalten? Dann müsste ich auch keinen Abfragen über UNION machen. In Excel-VBA wäre dass dann einfach quasi Zählen in Range Spalte A bis Spalte B. Das muss doch in Access auch gehen.

Das Problem ist die Weiterbearbeitung der Daten. Sind mehrere Datensätze mit gleichem Datum und Vorgangsnummer, müssen alle bis auf einer davon rausfliegen (Thema Redundanz und Verifizierbarkeit von Stichproben; sind auf Basis von Vorgängen und nicht auf Basis der Fehler). Dabei würde dann der eine Fehlerschwerpunkt verloren gehen. Man könnte natürlich eine Rückführung der Fehler in einen Datensatz anstreben. Weniger Arbeit hat man dann im Endeffekt aber auch nicht.

BananaDealer

Zitat von: Lachtaube am Dezember 05, 2017, 12:16:25
Hier ist ein funktionierender Fiddle.

PS: Es mag sein, dass Access keine Kreuztabellenabfrage basierend auf einer Vereinigungsabfrage mag. Dann muß man halt das Ergebnis der Vereinigungsabfrage zwischenspeichern (z. Bsp. als Text exportieren und verknüpfen).

Danke für diese Idee! Ich werde mal schauen, ob es umsetzbar ist. Das Beispiel aus dem Thread ist natürlich deutlich abgespeckt. Eigenschaften gibt es um die 50 und "Standorte" sind stellvertretend für 10 verschiedene Möglichkeiten die wieder 3 Mal unterteilt werden können, also 30.

MzKlMu

Hallo,
ZitatDas Beispiel aus dem Thread ist natürlich deutlich abgespeckt. Eigenschaften gibt es um die 50 und "Standorte" sind stellvertretend für 10 verschiedene Möglichkeiten die wieder 3 Mal unterteilt werden können, also 30.
Habe ich es nicht gesagt, völlig sinnloses Beispiel, das an der Realität vorbei geht.
Ich darf mich zitieren:
ZitatDiese erfundenen abstrakten Beispiele gehen meist an der Realität vorbei und erfordern oft mehr Rückfragen, weil dann nach auf dem Beispiel beruhenden Vorschlägen ein Ja, aber .... kommt.
Hier wirst Du um eine gründliche Umstrukturierung nach den Regeln der Normalisierung nicht herumkommen.
Gruß Klaus

BananaDealer

Ich wollte mit diesem Beispiel nur mein Ziel der Abfrage verdeutlichen und nicht die eigentliche Datenbankstruktur der Realität zeigen. Grund dafür war, dass ich in dem Glauben war, unabhängig von der Struktur, eine einfache Abfrage des Zählens über nicht eine, sondern zwei Spalten erwirken zu können. Etwas blauäugig ::)

Lachtaube

Du hast Murks in der Datenbank vorliegen. Wenn mein richtiges und wichtiges Excel-Sheet in Stein gemeißelt ist, heißt das nicht, dass ich auch in der selben Datenform in Access mit einem Import des Selben arbeiten muss. Ohne Normalisierung wird die Datenbank keinen Spaß machen (auch in Hinsicht bzgl. Ablaufgeschwindigkeiten). Soll nach erfolgter Datenver- oder Datenbearbeitung in der DB wieder etwas in das Excel-Sheet zurückfließen, lässt sich jederzeit die Ursprungsform wieder herstellen.

PS: meine bisherigen, aber schon etwas länger zurückliegenden Versuche mit Vereinigungsabfragen haben gezeigt, dass bei etwas weniger als 50 Vereinigungen in einer Abfrage Schluß war. D.h., dass Du ggf. mehrstufig die Eigenschaften zusammenführen musst.
Grüße von der (⌒▽⌒)

MzKlMu

Hallo,
ZitatEtwas blauäugig
etwas blauäugig ist gut. Das war wissentlich falsch. Mehrfach(!) behaupten es wären nur 2 Spalten und am Schluss sind es um die 50 und das auch noch in Gruppen, was ist da noch realitätsbezogen?
Um das mit Access als Kreuztabellenabfrage darstellen zu können, braucht es eine Tabelle mit 50*10*3=1500 Datensätzen.
Gruß Klaus