Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: datekk am Juli 30, 2018, 19:08:32

Titel: Hilfe bei Abfrage
Beitrag von: datekk am Juli 30, 2018, 19:08:32
Hallo :)

Ich möchte gern meinen Kunden Angebote für bestimmte Regionen zukommen lassen. In meiner tblKundenliste habe ich via Häckchen vermerkt, wer sich für welche Region interessiert:

ID_Kunde, Berlin, München, Leipzig, Hannover
1, -1, 0, -1, 0
2, 0, -1, -1, 0
3, -1, -1, -1,-1

Dann habe ich eine Tabelle Angebote
ID, PositionsID, Region, Preis
1, 1, Leipzig, 100
1, 2, Hannover, 500
1, 3, München, 1000
1, 4, Berlin, 2000

Ich möchte nun eine Abfrage, die folgendes ausgibt:

ID_Kunde, AngebotsId, PositionsId, Region, Preis
1, 1, 1, Leipzig, 500
1, 1, 4, Berlin, 2000
2, 1, 4, Leipzig, 100
2, 1, 1, München, 1000
3, 1, 1, Leipzig, 100
3, 1, 2, Hannover, 500
3, 1, 3, München, 1000
3, 1, 4, Berlin, 2000

Ist dies irgendwie machbar?
Titel: Re: Hilfe bei Abfrage
Beitrag von: MzKlMu am Juli 30, 2018, 19:28:10
Hallo,
ZitatIst dies irgendwie machbar?
Du solltest das Datenmodell umbauen. Ja/Nein Felder zu diesem Zweck sind für eine Datenbank völlig ungeeignet.
Siehe hierzu:
http://allenbrowne.com/casu-23.html
Du brauchst zunächst mal eine Tabelle die die Regionen enthält als je ein Datensatz mit einem Feld für einen Primärschlüssel.
Dann eine Tabelle in der die Kunden als jeweils ein Datensatz den Orten zugeordnet wird. Das ist eine klassische n:m Beziehung. Die Tabelle mit den Ja/Nein Feldern kannst Du ersatzlos löschen.
Die Angebotstabelle muss dann die Schlüsselzahl für die Region enthalten und nicht den Klartext.
Mit Hilfe dieser Tabelle kannst Du die gewünschte Abfrage direkt erstellen, ohne irgend etwas programmieren zu müssen.
Titel: Re: Hilfe bei Abfrage
Beitrag von: datekk am Juli 30, 2018, 21:22:00
Ja, mir ist bewusst, dass dies in der DB etwas ungünstig ist. Das Problem ist, die Kunden wählen Ihre Region über eine Web App und haken diese dort an. Die Eingaben werden so in der DB gespeichert. Das umzubauen wäre ein größerer Aufwand. Gibt es mit dem derzeitigen Aufbau dennoch irgend eine Möglichkeit das Ergebnis wie gewünscht auszugeben?
Titel: Re: Hilfe bei Abfrage
Beitrag von: ebs17 am Juli 30, 2018, 22:18:39
Zitatirgend eine Möglichkeit
Klar. Wenn Du eine übersichtliche und feste Anzahl von Regionen hast, kannst Du per UNION-Abfrage die erste Tabelle normalisieren. Dann ist es ein einfacher JOIN mit der zweiten Tabelle.

Für richtige Anwendungen dann statt UNION Grundlagen - SQL ist leicht (9) - Pivottabelle in Listtabelle umformen (https://www.ms-office-forum.net/forum/showthread.php?t=338193)
Titel: Re: Hilfe bei Abfrage
Beitrag von: PhilS am Juli 31, 2018, 09:37:33
Zitat von: datekk am Juli 30, 2018, 21:22:00Das Problem ist, die Kunden wählen Ihre Region über eine Web App und haken diese dort an.
Da du dort vermutlich ohnehin ein zwischengeschaltetes DataAccess-Layer hast, wäre es vermutlich dort einfacher das Problem an der Wurzel zu lösen, als in einem gebundenem Access-Form.
Zitat von: datekk am Juli 30, 2018, 21:22:00Gibt es mit dem derzeitigen Aufbau dennoch irgend eine Möglichkeit das Ergebnis wie gewünscht auszugeben?
Geht es hier wieder um ein SQL-Server-Backend? (Das solltest du unbedingt erwähnen!)
Wenn ja, ist die einfachste Lösung vermutlich die eingebaute UNPIVOT-Erweiterung der FROM-Klausel (https://docs.microsoft.com/en-us/sql/t-sql/queries/from-using-pivot-and-unpivot).
Titel: Re: Hilfe bei Abfrage
Beitrag von: datekk am Juli 31, 2018, 11:31:12
Danke ebs17 und PhilS.

Könnt Ihr mir mal ein Beispiel anhand meines Beispiels einer solchen Abfrage hier rein schreiben damit ich einen Einstieg finde?

@PhilS: Backend ist ein SQL Server, das ist korrekt. Dennoch erstelle ich Abfragen manchmal auch in Access weils dort auch recht bequem ist. Abfragen die allerdings lange in der Ausführung benötigen, werden dann manchmal auch als View in SQL angelegt. Der große Vorteil bei Access ist, dass Daten aus Abfragen mit mehreren Tabellen aktualisierbar bleiben, was leider leider leider und nochmal leider in SQL nicht umsetzbar ist oder ich bin zu blöd dafür  :-[
Titel: Re: Hilfe bei Abfrage
Beitrag von: ebs17 am Juli 31, 2018, 12:36:44
SELECT
   IDKunde,
   "Berlin" AS Ort
FROM
   QuellTab
WHERE
   Berlin = True
UNION ALL SELECT
   IDKunde,
   "Hamburg"
FROM
   QuellTab
WHERE
   Hamburg = True
...
Titel: Re: Hilfe bei Abfrage
Beitrag von: datekk am Juli 31, 2018, 16:10:31
Nice... danke. :)