collapse

* Benutzer Info

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

* Wer ist Online

  • Punkt Gäste: 28
  • Punkt Versteckte: 0
  • Punkt Mitglieder: 1
  • Punkt Benutzer Online:

* Forenstatistik

  • stats Mitglieder insgesamt: 14662
  • stats Beiträge insgesamt: 74468
  • stats Themen insgesamt: 10020
  • stats Kategorien insgesamt: 5
  • stats Boards insgesamt: 17
  • stats Am meisten online: 933

Autor Thema: Abfrage 'drehen'  (Gelesen 241 mal)

Offline Hondo

  • Administrator
  • Access Guru
  • ****
  • Beiträge: 4777
  • Balu
    • Access Hilfe
Abfrage 'drehen'
« am: Januar 03, 2020, 15:02:43 »
Hallo,
habe folgende Situation: 2 Tabellen dbo_booking und dbo_booking_rooms 1:n verbunden Über Felder ID->RoomID
SELECT dbo_booking_rooms.BookingID, dbo_rooms.room_name
FROM dbo_rooms INNER JOIN dbo_booking_rooms ON dbo_rooms.ID = dbo_booking_rooms.RoomID;
Abfrage liefert Buchungsnummer und Zimmernummer(n):
BookingIDroom_name
17Zimmer 101
21Zimmer 201
18Zimmer 203
18Zimmer 204

Für eine Ansicht bräuchte ich eine neue Abfrage die mir folgende Daten liefert:
BookingIDroom_name1room_name2room_name3room_name4room_name5
17Zimmer 101
21Zimmer 201
18Zimmer 203Zimmer 204

Ich möchte das aber als Abfrage machen und nicht eine neue Tabelle erstellen. Doch irgendwie find ich grad den Dreh nicht dass es mir die Felder füllt.
Gruß Andreas
 

Offline Hondo

  • Administrator
  • Access Guru
  • ****
  • Beiträge: 4777
  • Balu
    • Access Hilfe
Re: Abfrage 'drehen'
« Antwort #1 am: Januar 03, 2020, 16:13:17 »
Hallo,
habe mich mangels besseren Wissens doch für eine Tabellenlösung entschieden, und schreibe die Daten in eine temp. Datenbank/temp. Tabelle die eingebunden wird. Dazu habe ich eine Lösung von Norbert Uba verwendet und etwas abgeändert: http://www.office-loesung.de/ftopic161417_0_0_asc.php

Public Sub TransposeRooms()
    Dim strSQL As String
    Dim mBookingID As Long

    On Error GoTo TransposeRooms_Error

    If TmpTableInTmpDb("tmp_RoomNames", "dbo_RoomNames", "dbo_RoomNames") Then

        strSQL = "SELECT dbo_booking_rooms.BookingID, dbo_rooms.ID, dbo_rooms.room_name " & _
                 "FROM dbo_rooms INNER JOIN dbo_booking_rooms ON dbo_rooms.ID = dbo_booking_rooms.RoomID " & _
                 "ORDER BY dbo_booking_rooms.BookingID, dbo_rooms.room_name"

        With CurrentDb.OpenRecordset(strSQL, dbOpenForwardOnly)
            Do While Not .EOF
                If mBookingID <> !BookingID Then
                    CurrentDb.Execute "Insert into dbo_RoomNames (bookingID, roomname" & !ID & ") Values (" & !BookingID & ", '" & !room_name & "')"
                Else
                    CurrentDb.Execute "Update dbo_RoomNames set roomname" & !ID & "='" & !room_name & "' Where bookingID=" & mBookingID
                End If
                mBookingID = !BookingID
                .MoveNext
            Loop
        End With
    End If

    On Error GoTo 0
    Exit Sub

TransposeRooms_Error:
    'ErrHandler
End Sub

Funktioniert ganz gut, vor Aufruf der benötigten Ansicht wird jetzt immer TransposeRooms aufgerufen.
Gruß Andreas

PS: falls das doch mittels Query gehen sollte würde mich das schon interessieren.
 

Offline ebs17

  • Access Guru
  • ****
  • Beiträge: 1241
Re: Abfrage 'drehen'
« Antwort #2 am: Januar 03, 2020, 16:17:39 »
Die Darstellung lässt sich über eine Kreuztabellenabfrage erzeugen. In der Datenbasis dazu müsste man die Zuordnung roomX-Zimmername vornehmen. Das Wie ist nach Deiner Darstellung nicht so offensichtlich.
Mit freundlichem Glück Auf!

Eberhard
 

Offline PhilS

  • Global Moderator
  • Access-Meister
  • *****
  • Beiträge: 733
    • Tipps zu Access, VBA, SQL und Co.
Re: Abfrage 'drehen'
« Antwort #3 am: Januar 03, 2020, 17:01:37 »
Da du scheinbar einen SQL Server als Backend verwendest, hier eine T-SQL Lösung."room_data" ist dabei durch deine Ausgangsabfrage zu ersetzen.
Code: T-SQL
SELECT *
FROM  
(
    SELECT    BookingID
            ,room_name
            ,'room_name' + convert(varchar,ROW_NUMBER ( )
                                          OVER ( ORDER BY room_name ASC) ) AS Header
        FROM room_data
     ) rd  
PIVOT  
(  
MIN (room_name)  
FOR Header IN  
( [room_name1],[room_name2],[room_name3],[room_name4],[room_name5] )  
) AS pvt  
ORDER BY pvt.BookingID;
Was hier fehlt ist die Zuordnung von room_name zu deinen room_name1, 2, 3 Überschriften. Ich habe einfach mal durchnummeriert, aber das weicht bei deinem room_name3 ab.
 

Offline Hondo

  • Administrator
  • Access Guru
  • ****
  • Beiträge: 4777
  • Balu
    • Access Hilfe
Re: Abfrage 'drehen'
« Antwort #4 am: Januar 03, 2020, 17:09:52 »
Hallo Phil,
nein, ist eine MySQL-Datenbank - die aber für die Entwicklung des Access-Frontends momentan in ein Access-Backend portiert wurde.
Soll auch später im Betrieb auf MySQL laufen plus eine Hand von Tabellen die nur für das Access-Frontend benötigt werden.
Später soll auch ein PHP-Frontend dazu kommen.
Daher kann ich leider mit deiner Lösung nicht viel anfangen.
Aber danke dafür.

Die ID-Nummern der Zimmer stehen in dbo_booking_rooms.RoomID aus denen sich der neue Feldname bilden könnte.

Gruß Andreas

Btw: arbeite jetzt seit längerem wieder mal mit Ivercy, was macht man denn da mit dem Access-Backend? Die BackEnd-Links sind ja im Frontend eingecheckt, genügt das?
 

Offline PhilS

  • Global Moderator
  • Access-Meister
  • *****
  • Beiträge: 733
    • Tipps zu Access, VBA, SQL und Co.
Re: Abfrage 'drehen'
« Antwort #5 am: Januar 05, 2020, 17:30:14 »
nein, ist eine MySQL-Datenbank - die aber für die Entwicklung des Access-Frontends momentan in ein Access-Backend portiert wurde.
Soll auch später im Betrieb auf MySQL laufen plus eine Hand von Tabellen die nur für das Access-Frontend benötigt werden.
Später soll auch ein PHP-Frontend dazu kommen.
Ich halte es nicht für die beste Idee, für die Entwicklung das MySQL-Backend durch eine Access-BE zu ersetzen.
1. Können dir dabei einige Probleme entgehen, die du später in der Produktivumgebung haben könntest.
2. Bist du dann gezwungen den kleinsten gemeinsamen Nenner beider Systeme zu verwenden, anstatt die Features eines System wirklich ausnutzen zu können.

Aber davon mal abgesehen...
Du solltest in Access mit einer Kreuztabellenabfrage ein ähnliches Ergebnis erzielen können.
Auch mit Standard-SQL lässt sich eine Kreuztabelle erstellen. Ein Beispiel: CROSS TAB QUERY IN MYSQL
Der zweite Ansatz wäre wahrscheinlich besser, wenn du das Ergebnis sowohl in Access als auch PHP verwenden willst.
 

Offline PhilS

  • Global Moderator
  • Access-Meister
  • *****
  • Beiträge: 733
    • Tipps zu Access, VBA, SQL und Co.
Re: Abfrage 'drehen'
« Antwort #6 am: Januar 05, 2020, 17:36:54 »
Btw: arbeite jetzt seit längerem wieder mal mit Ivercy, was macht man denn da mit dem Access-Backend? Die BackEnd-Links sind ja im Frontend eingecheckt, genügt das?
Ich meine nein. - Die Links enthalten ausser dem Tabellennamen keine greifbare Information.
Leider lassen sich Access-Backends nicht gut in einer Quellcodeverwaltung ablegen.Für SQL Server Projekt legen wir die Erstellungs-/Änderungscripte ab. In Access hast du erstmal nur die Tabellen und Daten in der Binärdatei. Wenn du das trennen willst, bedeutet das zusätzlichen Aufwand. - Konkrete Erfahrungen habe ich damit allerdings nicht, weil wir schon lange keine Access-Backends verwenden.
 
 

Offline Hondo

  • Administrator
  • Access Guru
  • ****
  • Beiträge: 4777
  • Balu
    • Access Hilfe
Re: Abfrage 'drehen'
« Antwort #7 am: Januar 05, 2020, 19:07:53 »
Hallo Phil
Ich halte es nicht für die beste Idee, für die Entwicklung das MySQL-Backend durch eine Access-BE zu ersetzen.
1. Können dir dabei einige Probleme entgehen, die du später in der Produktivumgebung haben könntest.
2. Bist du dann gezwungen den kleinsten gemeinsamen Nenner beider Systeme zu verwenden, anstatt die Features eines System wirklich ausnutzen zu können.
Hast du eine Ahnung wie mühsam es es mit eingebundenem MySQL via ODBC zu arbeiten im Entwurf?
Ständig bricht die ODBC-Verbindung ab wenn man mit Form im Entwurf mit einer Datenherkunft arbeitet. Da hab ich absolut kein Bock mehr drauf.
Webspace mit Windows-Server ist mir momentan zu teuer - hab auch noch nie mit php damit entwickelt.
Das mit der Kreuztabellenabfrage sehe ich mir noch an, danke dafür.

Gruß Andreas
 

Offline PhilS

  • Global Moderator
  • Access-Meister
  • *****
  • Beiträge: 733
    • Tipps zu Access, VBA, SQL und Co.
Re: Abfrage 'drehen'
« Antwort #8 am: Januar 06, 2020, 08:51:46 »
Hast du eine Ahnung wie mühsam es es mit eingebundenem MySQL via ODBC zu arbeiten im Entwurf?
Ständig bricht die ODBC-Verbindung ab wenn man mit Form im Entwurf mit einer Datenherkunft arbeitet. Da hab ich absolut kein Bock mehr drauf.
Webspace mit Windows-Server ist mir momentan zu teuer - hab auch noch nie mit php damit entwickelt.
Mit MySql habe ich schon eine ganze Weile nicht mehr (als Access-Backend) gearbeitet. An derartige Probleme kann ich mich aber nicht erinnern. Mit Microsoft SQL Server als ODBC-Backend arbeite ich ständig und habe keine Probleme.

Ich würde einen Umstieg auf einem Windows Server für das WebHosting nicht empfehlen, wenn es nicht weitere Gründe dafür gibt. Übrigens, Microsoft SQL Server läuft seit SQL2017 auch auf Linux. ;-)
Die günstigste, stabile und zuverlässige Hosting-Möglichkeit mit Windows ist übrigens der Virtual Server von HostEurope.

 

Offline Hondo

  • Administrator
  • Access Guru
  • ****
  • Beiträge: 4777
  • Balu
    • Access Hilfe
Re: Abfrage 'drehen'
« Antwort #9 am: Januar 06, 2020, 16:35:10 »
Hallo,
bez. der Ausgangsfrage hat sich das erledigt, habe das jetzt anderst gelöst.
Gruß Andreas
 

 

Datensatzzähler in einer Abfrage

Begonnen von peterBoard Tabelle/Abfrage

Antworten: 6
Aufrufe: 16899
Letzter Beitrag Juni 16, 2010, 16:32:34
von cyorps
Abfrage für Terminüberschneidungen und visuelle Darstellung

Begonnen von centaurusBoard Tabelle/Abfrage

Antworten: 3
Aufrufe: 7768
Letzter Beitrag Januar 21, 2011, 21:30:14
von cy_one_1
Datenerfassung mit Abfrage

Begonnen von Daniel-GSBoard Tabelle/Abfrage

Antworten: 2
Aufrufe: 6584
Letzter Beitrag Mai 05, 2010, 22:52:18
von oma
SQL Abfrage DELETE rückgängig machen??

Begonnen von hmfmartinBoard Tabelle/Abfrage

Antworten: 1
Aufrufe: 9251
Letzter Beitrag Mai 08, 2010, 19:18:08
von MzKlMu
6 Mio Datensätze bei Abfrage

Begonnen von JohannaBoard Tabelle/Abfrage

Antworten: 11
Aufrufe: 10209
Letzter Beitrag Mai 19, 2010, 12:29:47
von Wurliwurm

Advertisment / Werbung - Amazon Affiliate Links