none
Unterabfrage aneinandergereiht RRS feed

  • Frage

  • Hallo Team,

    ich habe im MSSQL Server 2012 eine Tabelle mit Unterricht und eine Tabelle mit Schüler mit einer 1:n Beziehung.

    Die Tabelle Unterricht enthält z.B. die UnterrichtsID 1 mit dem Unterricht Deutsch. Die Tabelle Schüler enthält 3 Schüler mit der Spalte UnterrichtsID = 1.

    z.B. Tabelle Unterricht:

    UnterrichtsID, Unterricht
    1                     Deutsch

    Tabelle Schüler:

    SchuelerID, UnterrichtsID, Schueler
    1                 1                     Tom
    2                 1                     Martin
    3                 1                     Micha
    4                 1                     Mona

    Nun möchte ich in einer SQL Abfrage den Unterricht in einer Zeile und maximal 3 Schüler die am Unterricht teilnehmen anzeigen.
    UnterrichtsID, Unterricht, Schueler
    1                     Deutsch    Tom, Martin, Micha

    Wie kann ich die Subquery gestalten, damit ich einmal die erste Zeile, dann die zweite Zeile und dann die dritte Zeile in einer Verkettung anzeigen kann.

    Vielen Dank für jede Unterstützung. Ich freue mich auf die Rückmeldungen.

    Samuel

    Donnerstag, 20. September 2018 16:37

Alle Antworten

  • select UnterrichtsId, Unterricht,

    (select Schueler from Schüler where Schüler.UnterrichtsId =  Unterricht.UnterrichtsId
    order by schuelerid
    fetch next 1 rows only) as schueler1
    ,
    (select Schueler from Schüler where Schüler.UnterrichtsId =  Unterricht.UnterrichtsId
    order by schuelerid
    offset 1 rows
    fetch next 1 rows only) as schueler2
    ,
    (select Schueler from Schüler where Schüler.UnterrichtsId =  Unterricht.UnterrichtsId
    order by schuelerid
    offset 2 rows
    fetch next 1 rows only) as schueler3

    from Unterricht

    Donnerstag, 20. September 2018 17:05
  • Hallo,

    vielen Dank für die Rückmeldung. Ich habe erst einmal folgende Abfrage ausgeführt:

    SELECT UnterrichtSchuelerID, Matchcode FROM ITSnUnterrichtSchueler
    ORDER BY UnterrichtSchuelerID
    FETCH NEXT 1 ROWS ONLY

    Hier bekomme ich beim Ausführen folgenden Fehler: Ungültige Verwendung der Option NEXT in der FETCH-Anweisung. Die Markierung im Abfragefenster vom MS SQL Management Studio sagt: Incorrect syntax near 'ROWS'. Expecting FROM.

    Kann die die Abfrage nicht in einem Abfragefenster auf eine bestehende Tabelle ausführen?

    Vielen Dank für die Rückmeldungen.

    Samuel

    Freitag, 21. September 2018 09:16
  • Nun ja, die Kombinationen machen es:

    FETCH NEXT geht nur, wenn man auch OFFSET n verwendet.
    Ansonsten gilt "FETCH n ROWS ONLY" was vergleichbar zu "select TOP/FIRST n ..." ist.

    Ggf. funktioniert ebenso:
    select top 1 ....
    from...
    order by ...
    offset 1 rows

    Freitag, 21. September 2018 09:39