Announcement

Collapse
No announcement yet.

Eine Zeile trotz mehreren Einträgen (Join)

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

  • Eine Zeile trotz mehreren Einträgen (Join)

    Hallo zusammen,

    ich habe bei mir verschiedene Tabellen, welche ich mir jeweils passend zum Benutzer dazujoine.

    Tabellen:
    Benutzer (id,name,vorname,usw.)
    Telefonnummern (id, userid, telefonnummer, usw.)
    Rechte (id, name, beschreibung, usw.)

    X_Tabelle_rechte_user (userid, rechteid)

    Ein Benutzer kann beliebig viele Rechte und Telefonnummern haben.

    Mein Select jetzt:
    Code:
    select * from contacts c
    left join phone p on p.phone_contact_fk = c.cont_isn
    join x_user_rights ur on ur.user_isn_fk = c.cont_isn
    mein Ergebnis ist jetzt folgendermaßen:
    Vorname, Nachname, Tel, Recht
    1. Thomas, Müller, 08004711,Lesen
    2. Thomas, Müller, 08004711,Schreiben
    3. Thomas, Müller, 08004711,Löschen
    4. Thomas, Müller, 08004712,Lesen
    5. Thomas, Müller, 08004713,Lesen
    6. Thomas, Müller, 0190456414,Lesen

    Also für jedes Recht und für jede telefonnummer eine eigene Reihe, das ist nicht schön.

    Ich hätte gerne eine Liste, in der jeder Name nur ein mal auftaucht, jedoch trotzdem alle Daten vorhanden sind.

    Vorname, Nachname, Tel1 | Tel2 | tel3..., Recht1 | Recht2 | Recht 3
    Thomas, Müller, 08004711 | 08004712 | 08004713 | 0190456414,Lesen | Schreiben | Löschen

    könnt ihr mir sagen, wie das möglich ist, also wie mein select/die prozedur dann aussehen muss?

    Vielen Dank!
    .:Zipper:.
    Zuletzt editiert von Zipper; 04.02.2011, 15:17.

  • #2
    Dynamisch und mit reinem SQL gar nicht (ausser auf speziellem DBRMS). Aber generell sind Transpositionen in SQL nicht möglich.

    Comment


    • #3
      Fertige doch einen Bericht an und speichere diesen in einer Excel Tabelle, dann ist die Sache nicht so kompliziert und sieht trotzdem gut aus.

      Comment


      • #4
        wenn nicht jede Telefonnummern und jedes Recht eine eigene Spalte sein müssen, sondern auch zusammen in jeweils einer Spalte erscheinen dürfen, könnte man in Oracle 11.2 die analytische Listagg-Funktion verwenden: http://www.oracle.com/global/de/comm...x.html#listagg
        Code:
         select
          deptno,
          listagg(ename, ',') within group (order by ename) ename_list
         from emp
         group by deptno
        
        DEPTNO ENAME_LIST
        ------ -------------------------------------------------------
            10 CLARK,KING,MILLER
            20 ADAMS,FORD,JONES,SCOTT,SMITH
            30 ALLEN,BLAKE,JAMES,MARTIN,TURNER,WARD
        Für ältere Release >= 9 käme Tom Kytes STRAGG-Funktion in Frage: http://asktom.oracle.com/pls/asktom/...:2196162600402

        Gruß

        MP
        http://martinpreiss.blogspot.com/

        Comment


        • #5
          Originally posted by MPr View Post
          wenn nicht jede Telefonnummern und jedes Recht eine eigene Spalte sein müssen, sondern auch zusammen in jeweils einer Spalte erscheinen dürfen, könnte man in Oracle 11.2 die analytische Listagg-Funktion verwenden:
          Für ältere Release >= 9 käme Tom Kytes STRAGG-Funktion in Frage: http://asktom.oracle.com/pls/asktom/...:2196162600402

          Gruß

          MP
          Vielen Dank.
          Leider verwenden wir Oracle 10.2g, muss mir das also etwas genauer ansehen, sieht ziemlich kompliziert aus.
          Aber danke für den Link!

          Comment


          • #6
            In PL/SQL geht sowas allerdings viel viel leichter. Vielleicht magst Du Dir das mal anschauen

            Comment


            • #7
              Originally posted by fanderlf View Post
              In PL/SQL geht sowas allerdings viel viel leichter. Vielleicht magst Du Dir das mal anschauen
              Kannst du mir da evtl. etwas zum Lesen geben?

              Besonders schön wäre, wenn man das hin bekäme ohne neue Tabellen oder Prozeduren anlegen zu müssen.

              Also nur "wegwerf-funktionen", da ich nicht mal eben so etwas an der Datenbankstruktur ändern darf.

              Comment


              • #8
                Na die Funktion würde ja die Struktur nur erweitern. Ich denke man könnte aber auch ein Skript schreiben. Allerdings weiss ich nicht in wie weit man Skript output in .NET direkt weiter verarbeiten kann.

                Das sieht doch gar nicht schlecht aus:

                http://aspdotnetcode.source-of-humor...Transpose.aspx

                Habs aber nicht genau gelesen obs auch wirklich passt

                Comment

                Working...
                X