Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Hilfe bei Abfrage

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von myerscola, 24 November 2013.

  1. myerscola

    myerscola Benutzer

    Hallo,
    ich bin neu hier und sicher kein SQL-Crack.
    Ich soll jetzt aus einer Tabelle eines Sportvereins eine Abfrage generieren und habe keine Idee wie ich es anfange.
    In der Tabelle stehen Name,Vorname, Mitgliedsnummer, Eintrittsdatum, Eintrittszaehler. Die Trainer nehmen bei ihren Eintritten immer Schüler auf ihre Karte mit, d.h. das sie an einem Tag unter Umtänden 20 Besuche in der Tabelle haben.

    Die Abfrage soll jetzt als Ergebnis die Auswertung eines Monats sein, in der dann die jeweiligen Ersteintritte und der mitgenommenen Schüler, also Ergebnis z.B. für September:
    Name Vorname Mitgliedsnummer Eigene Besuche Schuelerbesuche
    -------'------------'---------------------'--------------------'------------
    Muster Peter 0815 7 54
    Weiss Tina 4711 8 123

    Ich hoffe das Problem ist verständlich und vor allem das mir jemand helfen kann.

    Danke und Gruß myerscola
     
  2. ukulele

    ukulele Datenbank-Guru

    Was verstehst du unter einem Eintritt? Was genau zählt der Eintrittszähler? Wird das Eintrittsdatum jedesmal überschrieben oder gibt es in der Tabelle mehrere Einträge zur selben Person?
     
  3. myerscola

    myerscola Benutzer

    Hallo,
    das Ganze ist ein System mit Transponder und jedesmal wenn jemand den Leser betätigt gibt es einen neuen Eintrag in eine Tabelle Eintritte der DB. Das Wort Eintrittszaehler wundert mich auch, da steht immer 1 drin.
    Also pro Eintritt eine neue Zeile in dieser Tabelle.
    Ich habe bisher eine Abfrage so gemacht:
    Code:
    SELECT MITGLIEDSNUMMER, COUNT(MITGLIEDSNUMMER) AS Anzahl_Besuche, Name
    FROM EINTRITTE where  Month(EINTRITTSDATUM) = 10  and YEAR(EINTRITTSDATUM) = 2013
    GROUP BY MITGLIEDSNUMMER
    HAVING ( COUNT(MITGLIEDSNUMMER) > 1 )
    Jetzt wird aber gewünscht , das die Eintritte des Trainers separiert werden, also nur der 1. Eintritt pro Tag dem Trainer als Eigeneintritt zugeordnet wird und alle Weiteren summiert dem Trainer als Schülereintritte zugeordnet werden.
     
  4. akretschmer

    akretschmer Datenbank-Guru

     
  5. myerscola

    myerscola Benutzer

    Sorry, mein Fehler:

    Code:
    SELECT MITGLIEDSNUMMER, COUNT(MITGLIEDSNUMMER) AS Anzahl_Besuche, Name
    FROM EINTRITTE where  Month(EINTRITTSDATUM) = 10  and YEAR(EINTRITTSDATUM) = 2013
    GROUP BY MITGLIEDSNUMMER, Name
    HAVING ( COUNT(MITGLIEDSNUMMER) > 1 )
    Unterschieden wird es nicht wirklich. Es soll einfach wenn z.B. der Mustermann 10 Eintritte an einem Tag hat aufgeteilt werden in 1xTrainer 9xSchüler und das als Summe für den Monat. Da die Anzahl der Schüler immer unterschiedlich ist, kann ich aus der Monatssumme nicht direkt zurückschließen.
     
  6. akretschmer

    akretschmer Datenbank-Guru

    Dann einfach zählen, 1 ist fest für den Trainer und count()-1 ist dann Anzahl der Schüler.
     
  7. ukulele

    ukulele Datenbank-Guru

    Das heißt die erste Person an einem Tag ist immer Trainer und alle anderen sind Schüler? Oder können auch mehrere Trainer mit Schülern am selben Tag kommen?
     
  8. myerscola

    myerscola Benutzer

    Das haut leider nicht hin. Wenn ich immer minus 1 mache, berücksichtige ich die Anuahl der Tage nicht richtig.

    @ukulele - ja, der Trainer ist immer der Erste und nur der erste Eintrit am Tag soll auch gezählt werden. Die Schüler benutzen auch seinen Chip zum Eintreten. Es können auch mehrere Trainer am Tag kommen aber die haben dann eine andere Mitgliedsnummer.
     
  9. ukulele

    ukulele Datenbank-Guru

    In etwa so könnte es gehen:
    Code:
    SELECT   t.name,
         t.vorname,
         t.mitgliedsnummer,
         left(t.eintrittsdatum,6) AS Eintrittsdatum,
         count(*) AS [Eigene Besuche],
         sum(t.anzahl) - count(*) AS Schuelerbesuche
    FROM   (
    SELECT   name,
         vorname,
         mitgliedsnummer,
         convert(CHAR(8), eintrittsdatum, 112) AS eintrittsdatum,
         count(*) AS anzahl
    FROM   eintritte
    GROUP BY name,vorname,mitgliedsnummer,convert(CHAR(8), eintrittsdatum, 112)
    )t
    GROUP BY t.name,t.vorname,t.mitgliedsnummer,left(t.eintrittsdatum,6)
    ORDER BY t.name,t.vorname
     
    myerscola gefällt das.
  10. myerscola

    myerscola Benutzer

    So Ukulele, hat es was länger gedauert die Zahlen zu überprüfen. Das ist die Lösung, klappt perfekt. Du hast es echt drauf
    Vielen Dank für die Hilfe.
    LG myerscola
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden