Announcement

Collapse
No announcement yet.

Komplexe Abfrage?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Komplexe Abfrage?

    Hallo!

    Ich hab mal eine (wie ich finde) richtig schwierige Abfrage.

    In der Tabelle tblperson sind alle Personen eines Vereins:

    tblPersonen: PID, PName, PVorname

    In der Tabelle tblOrg sind die einzelnen Gruppen eines Vereins:

    tblOrg: OrgID, OrgBez

    In der Tabelle tblZuordnung sind die Zuordnungen der Personen zu den Gruppen definiert. Eine Person kann in beliebig vielen Gruppen sein.

    tblZuordnung: PID, OrgID



    Nun möchte ich in meiner Anwendung ein Grid zeigen, mit folgendem Spaltenaufbau:

    Name, Vorname, Bez Org1, Bez Org 2, …

    Die Anzahl der Spalten für die Org ist variabel.(werden aber nicht mehr als 50)

    In den Zeilen stehen Name und Vorname der Person, und dann ein True, wenn es einen Eintrag in der Kombination gibt und ein false wenn nicht.

    Hat jemand einen Ansatz, wie die SQL Abfrage aussehen muss, damit ich eine solche Tabelle bekomme? (MS SQL Server 2008 R2 Express)

    Vielen Dank.

  • #2
    Originally posted by SQL-Rookie View Post
    Hallo!
    Hat jemand einen Ansatz, wie die SQL Abfrage aussehen muss, damit ich eine solche Tabelle bekomme? (MS SQL Server 2008 R2 Express)

    Vielen Dank.
    Das Stichwort ist Kreuztabelle oder Pivot Query, das gibts mittlerweile auch bei MSSQL. Ich habs aber unter MS noch nie benutzt und weiß nicht, wie weit da die Möglichkeiten gehen.
    Hier findest Du ein Ansatz:
    http://msdn.microsoft.com/de-de/libr...ql.105%29.aspx
    Gruß, defo

    Comment


    • #3
      Nur noch zur generellen Aufklärung: Das ist ein DB spezifisches Feature und wird von den meisten anderen DBs nicht unterstützt.

      Comment


      • #4
        Hallo SQL-Rookie :-)
        hier wurde eine sehr ähnliche Frage gestellt.
        http://entwickler-forum.de/showthrea...Zeile-anzeigen

        knoxyz
        Und Falk Prüfer sprach: Formatierung von SQL in Beiträgen

        Comment


        • #5
          Originally posted by knoxyz View Post
          Hallo SQL-Rookie :-)
          hier wurde eine sehr ähnliche Frage gestellt.
          http://entwickler-forum.de/showthrea...Zeile-anzeigen

          knoxyz
          Danke für den Link und die Hinweise. Hab mich mal ein bisschen durchgeklickt. Da war noch ein Link auf http://www.kodyaz.com/articles/t-sql...-examples.aspx

          Das sieht sehr vielversprechend aus. Werde ich heute Abend mal probieren, ob ich damit weiterkomme. Scheint insgesamt aber nicht trivial zu sein, aber das wird schon ...

          Comment


          • #6
            Möchtest du wirklich eine bis zu 50 Spalten breite Tabelle haben, obwohl offensichtlich die wenigsten Felder Werte enthalten?
            Mit diesem Befehl bleibt es bei übersichtlichen drei Spalten.

            [Highlight=SQL]
            SELECT DISTINCT
            PName
            ,PVorname
            ,Gruppen = ( SELECT DISTINCT OrgBez + '; '
            FROM tblOrg G
            INNER JOIN tblZuordnung Z
            ON G.OrgID = Z.OrgID
            WHERE P.PID = Z.PID
            --ORDER BY OrgBez
            FOR XML PATH('')
            )
            FROM tblPersonen P
            [/Highlight]
            Und Falk Prüfer sprach: Formatierung von SQL in Beiträgen

            Comment


            • #7
              Originally posted by knoxyz View Post
              Möchtest du wirklich eine bis zu 50 Spalten breite Tabelle haben, obwohl offensichtlich die wenigsten Felder Werte enthalten?
              Mit diesem Befehl bleibt es bei übersichtlichen drei Spalten.

              [Highlight=SQL]
              SELECT DISTINCT
              PName
              ,PVorname
              ,Gruppen = ( SELECT DISTINCT OrgBez + '; '
              FROM tblOrg G
              INNER JOIN tblZuordnung Z
              ON G.OrgID = Z.OrgID
              WHERE P.PID = Z.PID
              --ORDER BY OrgBez
              FOR XML PATH('')
              )
              FROM tblPersonen P
              [/Highlight]

              Hab das mal probiert. Funktioniert sehr gut, vielen Dank,

              ist eine echte Alternative, und nicht so komplex wie die Pivot-Abfrage. Ich hab versucht, am Ende ein

              Code:
              WHERE Gruppen is not null
              anzufügen, um nur die anzuzeigen, die auch wirklich eine Gruppenzuordnung haben.

              Aber das funktioniert noch nicht. Eine Idee?

              Comment

              Working...
              X