Announcement

Collapse
No announcement yet.

suche über mehrere zeilen

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

  • suche über mehrere zeilen

    Hallo miteinander,

    wahrscheinlich für euch ein einfach zu lösendes Problem.
    Ich habe einch habe eine Tabelle mit 3 Spalten (Projekt, Verknüpfung , Kunde).

    Projekt Verknüpfung Kunde
    P1 hatKunde bmw
    P1 hatMitarbeiter Müller
    P2 hatKunde audi
    P2 hatMitarbeiter Müller

    ........

    Benötige eine Anweisung wie: Zeig mir alle Projekte, wo der Kunde BMW ist und der Mitarbeiter Müller heißt. Hier Ergebnis P1. Also muss über mehrere Datensätze verglichern werden.

    Wünsche allen noch einen schönen Tag und herzlichen Dank für die Unterstützung.e Tabelle

  • #2
    Hallo,

    das Problem wäre einfacher lösbar wenn die Tabelle normalisiert wird => "zerlege" die Tabelle in 2, eine für die 'hatMitarbeiter' und eine für die 'hatKunde'. Dann kann die Abfrage einfach per JOIN erfolgen.

    Diese Art der Speicherung ist nicht zweckmäßig.


    mfG Gü
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      Hallo gfoidl,
      danke für die schnelle Antwort.
      Ich muss auf eine vorhandene Datenbank zugreifen, wo die Strucktur vorgegeben ist. Es gibt auch nicht nur "hat Kunde" und "hat Mitarbeiter" sondern noch viele mehr. Stehe gerade auf dem Schlauch und habe das Problem auf ein einfaches Beispiel heruntergebrochen.

      Geht das vielleicht irgendwie mit einer Unterabfrage?

      Comment


      • #4
        Hallo,

        ok - dann hilft es nichts

        Hab die Lösung mit einem JOIN auf dieselbe Tabelle lösen können:
        [highlight=sql]
        SELECT t1.Projekt, t1.Verknüpfung, t1.Kunde
        FROM #Tabelle AS t1
        JOIN #Tabelle AS t2
        ON t1.Projekt = t2.Projekt
        WHERE t1.Verknüpfung = 'hatKunde'
        AND t1.Kunde = 'BMW'
        AND t2.Verknüpfung = 'hatMitarbeiter'
        AND t2.Kunde = 'Müller'
        [/highlight]

        Ob es eleganter/besser geht weiß ich nicht. Aber je nach Datenbank könnte auch ein PIVOT erstellt werden.


        mfG Gü
        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

        Comment


        • #5
          Guten Morgen Gü,

          danke für die Hilfe. Werde es gleich mal Probieren.

          Comment


          • #6
            Hallo Gü

            Dein Code funktioniert einwandfrei.
            Habe es mit deiner Anregung jetzt etwas anderst gelöst, da ich noch mehr Verknüpfungen habe.

            [highlight=sql]
            SELECT t1.Projekt, t1.Verknüpfung, t1.Kunde, t2.Verknüpfung, t2.Kunde, t3.Verknüpfung, t3.Kunde
            FROM #Tabelle AS t1, Tabelle AS t2, Tabelle AS t3
            WHERE t1.Projekt = t2.Projekt
            AND t1.Projekt = t3.Projekt
            AND t1.Verknüpfung = 'hatKunde'
            AND t1.Kunde = 'BMW'
            AND t2.Verknüpfung = 'hatMitarbeiter'
            AND t2.Kunde = 'Müller'
            AND t3.Verknüpfung = 'hat3tesKriterium'
            AND t3.Kunde = 'erfüllt3tesKriterium'
            [/highlight]

            Ich kann mir die SQL Abbfrage dann varialel zusammensetzen und beliebig erweitern.

            Nochmals Vielen Dank und weitere Anregungen hezlichst willkommen.
            Zuletzt editiert von loki99; 31.05.2010, 05:50.

            Comment


            • #7
              Schön, dass du die Lösung bringst. Wenn du sie in [highlight=sql]Text[/highlight] einbinden würdest (und die # als Zeilennummern entferntest), wäre sie auch schön zu lesen.

              Gruß Jürgen

              Comment


              • #8
                Guten Morgen Jürgen,


                sorry, habs sofort korrigiert.

                Gruß Loki

                Comment


                • #9
                  Jetzt noch Parameter statt Werte verwenden, dann ist die Abfrage noch flexibler und auch schneller als ständig das Staement anzupassen

                  Comment

                  Working...
                  X