Announcement

Collapse
No announcement yet.

SQL-Problem wie einzelne Zeilen AND verknüpfen

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

  • SQL-Problem wie einzelne Zeilen AND verknüpfen

    hallo,
    ich habe ein Problem mit einem SQL und stehe ggf. etwas auf dem Schlauch.

    Ich habe Datensätze die haben eine FremdschlüsselID und eine DatensatzID.

    Team1, 4
    Team2, 4
    Team2, 6
    Team66,7
    Team2, 9
    Team1, 45
    Team66,89

    Jetzt habe ich in einer weiteren Tabelle Zuordnungen gespeichert. Vereinfacht geschrieben:

    Globales Team A, Team1
    Globales Team A, Team2
    Globales Team B, Team66

    Jetzt möchte ich mir die DatensatzIDs von oben anzeigen lassen die alle Erfordernisse (also AND Verknüpfung) für Globales Team A erfüllen.
    Ist nur eines erfüllt (Team1 oder Team2), darf es keinen Datensatz anzeigen.

    Aus dem Beispiel möchte ich für Globales Team A nur DatensatzID 4 bekommen.
    Über ein Join meiner IDs bekomme ich den Treffer wenn eines der Unterteams zutrifft.

    Wie muss ich mein SQL schreiben dass ich zum Ergebnis komme?

  • #2
    Hallo openshinok,

    was genau heisst
    lassen die alle Erfordernisse ... erfüllen
    Ist bekannt, das für Team A zwei Einträge vorhanden sein müssen? Wenn ja, dann zähl doch einfach:
    [highlight=SQL]SET NOCOUNT ON
    GO
    CREATE TABLE #t
    (team varchar(20), myId int);
    INSERT INTO #t VALUES('Team1', 4);
    INSERT INTO #t VALUES('Team2', 4);
    INSERT INTO #t VALUES('Team2', 6);
    INSERT INTO #t VALUES('Team66',7);
    INSERT INTO #t VALUES('Team2', 9);
    INSERT INTO #t VALUES('Team1', 45);
    INSERT INTO #t VALUES('Team66',89);
    GO
    CREATE TABLE #f
    (glob varchar(20), team varchar(20));
    INSERT INTO #f VALUES('Globales Team A', 'Team1');
    INSERT INTO #f VALUES('Globales Team A', 'Team2');
    INSERT INTO #f VALUES('Globales Team B', 'Team66');
    GO

    SELECT #t.myId, COUNT(*) AS Anz
    FROM #t
    INNER JOIN #f
    ON #t.team = #f.team
    WHERE #f.glob = 'Globales Team A'
    GROUP BY #t.myId
    HAVING COUNT(*) = 2

    GO
    DROP TABLE #t;
    DROP TABLE #f;[/highlight]
    Olaf Helper

    <Blog> <Xing>
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich

    Comment


    • #3
      Hallo,
      genau das mit dem zählen der Gruppierungsmitglieder und die tatsächlich erreichten Vorkommnisse ist mir nach dem Post auch eingefallen. Funktioniert auch so, nur war es etwas tricky weil ein Distinct eingefügt werden musste und ich dafür mit einer Sicht bzw. Select auf ein anderes Select arbeiten musste.

      Danke dir

      Comment

      Working...
      X