Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Hilfe bei Abfrage

Begonnen von datekk, Juli 30, 2018, 19:08:32

⏪ vorheriges - nächstes ⏩

datekk

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?
Access 2016 mit SQL Server Backend. Bereits umgesetzt: Access mit MS SQL Backend,  ADODB Formularbindung, Streamen von Dateien zum SQL Server und zurück (Filestream), Drag&Drop Dateiupload zum Server, CTI / TAPI Integrierung in Access Anwendung - Nutzung auch über Remote Desktop, selbst aktualisierendes Access Frontend auf entfernten Rechnern (Upgrade). Berichte / Kreuztabellen mit SQL Server Backend, Mail Tagging, Outlook Steuerung über Access und umgekehrt // Grundwissen in .Net Core & Blazor Apps

MzKlMu

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.
Gruß Klaus

datekk

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?
Access 2016 mit SQL Server Backend. Bereits umgesetzt: Access mit MS SQL Backend,  ADODB Formularbindung, Streamen von Dateien zum SQL Server und zurück (Filestream), Drag&Drop Dateiupload zum Server, CTI / TAPI Integrierung in Access Anwendung - Nutzung auch über Remote Desktop, selbst aktualisierendes Access Frontend auf entfernten Rechnern (Upgrade). Berichte / Kreuztabellen mit SQL Server Backend, Mail Tagging, Outlook Steuerung über Access und umgekehrt // Grundwissen in .Net Core & Blazor Apps

ebs17

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
Mit freundlichem Glück Auf!

Eberhard

PhilS

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.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

datekk

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  :-[
Access 2016 mit SQL Server Backend. Bereits umgesetzt: Access mit MS SQL Backend,  ADODB Formularbindung, Streamen von Dateien zum SQL Server und zurück (Filestream), Drag&Drop Dateiupload zum Server, CTI / TAPI Integrierung in Access Anwendung - Nutzung auch über Remote Desktop, selbst aktualisierendes Access Frontend auf entfernten Rechnern (Upgrade). Berichte / Kreuztabellen mit SQL Server Backend, Mail Tagging, Outlook Steuerung über Access und umgekehrt // Grundwissen in .Net Core & Blazor Apps

ebs17

SELECT
   IDKunde,
   "Berlin" AS Ort
FROM
   QuellTab
WHERE
   Berlin = True
UNION ALL SELECT
   IDKunde,
   "Hamburg"
FROM
   QuellTab
WHERE
   Hamburg = True
...
Mit freundlichem Glück Auf!

Eberhard

datekk

Access 2016 mit SQL Server Backend. Bereits umgesetzt: Access mit MS SQL Backend,  ADODB Formularbindung, Streamen von Dateien zum SQL Server und zurück (Filestream), Drag&Drop Dateiupload zum Server, CTI / TAPI Integrierung in Access Anwendung - Nutzung auch über Remote Desktop, selbst aktualisierendes Access Frontend auf entfernten Rechnern (Upgrade). Berichte / Kreuztabellen mit SQL Server Backend, Mail Tagging, Outlook Steuerung über Access und umgekehrt // Grundwissen in .Net Core & Blazor Apps