German SQL DB Doppelte Einträge ausschließen

Discussion in 'German Forum' started by strupp01, May 17, 2017.

  1. strupp01

    strupp01 Active Member Licensed User

    Ich habe eine Datenbank 'Test' mit einer Tabelle 'Allgemein'. In dieser Tabelle sind hunderte Einträge.
    Die Spalten sind 'Datum_Aufzeichnung', 'Uhrzeit', 'Druck' und 'Anschluesse'.
    Ich möchte die Summe der Spalte 'Druck' in der Zeit von '170402' bis '170403' ermitteln.
    Dies ist ja noch für mich möglich mit

    Test = sql_SchlafGut.ExecQuerySingleResult("SELECT sum(Druck) FROM Allgemein where Datum_Aufzeichnung <= 170403 and Datum_Aufzeichnung >= 170402 order by Datum_Aufzeichnung ASC")

    Das Ergebnis aus der beigefügten DB ist 14.
    Da jedoch das Aufzeichnungs_Datum teilweise mehrfach in der Tabelle vorhanden ist, stimmt mein Ergebnis nicht. Es darf die Anzahl bei Druck für ein Aufzeichnungs_Datum nur einmal gerechnet werden. Das Ergebnis muss 5 sein.

    D. h. ich muss DISTINCT beim Aufzeichnungs_Datum verwenden.
    Hier bin ich mit meinem Latein am Ende und hoffe von einem SQL-Kenner die Lösung zu bekommen.
     

    Attached Files:

    • Test.zip
      File size:
      527 bytes
      Views:
      20
  2. JOTHA

    JOTHA Well-Known Member Licensed User

    Hallo strupp01 ...
    Wenn du in einem 2. Durchgang statt "ORDER BY" --> "GROUP BY" verwendest, kannst Du mit Cursor.RowCount die Anzahl der Zeilen ermitteln.
    Das entspricht dann auch gleichzeitig der Anzahl vom jeweiligen Aufzeichnungs_Datum.
     
  3. strupp01

    strupp01 Active Member Licensed User

    Was heißt in einem 2. Durchgang? Kannst du mir ein Beispiel aufzeigen ?
     
  4. JOTHA

    JOTHA Well-Known Member Licensed User

    Im ersten Durchgang holst Du Dir dein gewünschtes Ergebnis (was immer auch das sein mag), oder möchtest Du eigentlich nur wissen, wieviel ...
    ... das im Ergebnis ausmacht?

    Mit GROUP BY wird in der Tabelle der Datumswert (welcher bei Dir hundertfach vorkommt) nur einmal gelistet, dann der nächste ... und so weiter.
    Mit Cursor.RowCount werden dann nur die Zeilen gezählt. Das wäre ja dann auch "5", oder?

    Mit ORDER BY sortierst du die Tabelle.
    Mit GROUP BY gruppierst du die Tabelle.

    In deinem Fall:

    Code:
    Test = sql_SchlafGut.ExecQuerySingleResult("SELECT sum(Druck) FROM Allgemein where Datum_Aufzeichnung <= 170403 and Datum_Aufzeichnung >= 170402 GROUP BY Datum_Aufzeichnung ASC")
    ... da müsste dann als Ergebnis "5" rauskommen ...
     
  5. strupp01

    strupp01 Active Member Licensed User

    Ich brauche nicht die Anzahl Zeilen sondern die Summe in Spalte Druck.
     
  6. JOTHA

    JOTHA Well-Known Member Licensed User

    Also mit deiner beigefügten Tabelle kann ich nichts anfangen, sie enthält 6 Datensätze (siehe Bild), mehr ist nicht zu sehen ...

    Habe ich deine Frage verstanden?
    Du willst wissen: "Es darf die Anzahl bei Druck für ein Aufzeichnungs_Datum nur einmal gerechnet werden. Das Ergebnis muss 5 sein."

    Wenn Du meinen Code verwendest, zählt er für ein Datum (z.B. für heute) nur "1", auch wenn 500 mal gedruckt worden wäre.
    Oder meinst Du etwas anderes? ... dann formuliere es anders ...
     

    Attached Files:

  7. strupp01

    strupp01 Active Member Licensed User

    wenn in meiner beigefügten Tabelle bei Datum Aufzeichnung am 170403 bei allen 3 Uhrzeiten in der Spalte Druck 500 stehen würde, so müßte als Ergebnis aus meiner DB 501 herauskommen.
     

    Attached Files:

    • Test.zip
      File size:
      541 bytes
      Views:
      18
  8. strupp01

    strupp01 Active Member Licensed User

    Ich gehe damit mal ins englische Forum, aber Danke für deine Mühe
     
Loading...