MS SQL - Gruppieren und Zählen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • MS SQL - Gruppieren und Zählen

    Hallo,
    habe folgende Tabelle:

    Ergebnisse (Identnummer, Zeit, etc...)

    Problem:
    In einer zusätzlichen Spalte soll ausgegeben werden, das wievielte Mal diese Identnummer an dieser Stelle (nach Zeit sortiert) vorkommt. Ähnlich Excel-Funktion z.B. "=Zählenwenn($A$1:A5;A5)"

    Habe folgendes erfolglos versucht:
    SELECT Identnummer, Zeit, Sum(Identnummer) as Ergebnis
    FROM Ergebnisse
    WHERE ...
    GROUP BY Identnummer
    ORDER BY Zeit

    Vielen Dank!

  • #2
    Wenn zu zählen willst, versuch COUNT statt SUM().

    Falls du weitere hilfe brauchst, definiere "an dieser Stelle"

    Das order By Zeit ist auch etwas missverständlich. Du aggregierst ja. Welchen Zeitwert nimmst du also an?

    Kommentar


    • #3
      MS SQL - Gruppieren und Zählen

      Hallo Tobiaz,

      Danke für Deine Antwort.
      Count habe ich schon ausprobiert. Gibt mir nur die Gesamthäufigkeit der jeweiligen Identnummer aus.

      in der tabelle stehen die gleichen identnummern nicht untereinander. sie sind über die tabelle verteilt und haben jeweils einen zeitstempel.
      in der spalte "vorkommen", soll dann stehen, das wievielte mal die identnr. an dieser stelle(zu diesem Zeitpunkt) vorkommt.

      identnr. zeit vorkommen
      1 10s 1
      2 11s 1
      3 12s 1
      1 12s 2
      3 12s 2
      3 13s 3
      2 13s 2
      1 14s 2
      1 15s 3 (an dieser stelle(also zeitlich) kommt die
      identnr. 1 jetzt schon zum 3ten mal)

      Ich benötige die Zuordnung als Basis für eine spätere Pivotauswertung je Auftrag (bis zu 500.000 Datensätzen). Bin bei meiner Suche nicht weitergekommen; nur in Oracle evtl. mit Lead()=Vorgänger und Lag()=Nachfolger. Ich greife aber auf eine MSSQL-Datenbank. zu.

      Danke schon mal für die Hilfe!

      Kommentar


      • #4
        Ich bin kein MSSQL-Experte. Aber wenn, dann lässt sich das vermutlich nur über irgendwelche Temporären Variablen regeln. Das müsste ich aber selbst nachlesen. In einer simplem Query ist das jedoch nicht möglich.

        Kommentar


        • #5
          MS SQL - Gruppieren und Zählen

          Hallo Tobiaz,
          ich hoffe Du findest etwas.
          Habe schon sämtliche Freunde/Kollegen gefragt.

          Die Abfrage müßte meiner Vorstellung nach so funktionieren,
          dass:
          1. die Datensätze nach Zeit geordnet werden,
          2. nach Identnummer gruppiert wird,
          3. die Identnummer innerhalb der Gruppierung durchgezählt wird

          Danke schon mal.

          Kommentar


          • #6
            Hallo,

            wenn du nach Identnummer gruppierst, bekommst du aber ein gruppiertes Ergebnis, d. h. dass alle Datensätze mit der gleichen Identnummer zu einem Datensatz zusammengefasst werden. Das hilft dir leider überhaupt nicht dabei zu ermitteln, das wievielte Vorkommen das jetzt war, weil alle Vorkommen zu einer Zeile zusammengefasst werden.

            Wenn du um diese Abfrage noch ein Programm/Script hast, wäre es damit am einfachsten, also z. B. PHP die Vorkommen zählen lassen.

            Wenn dir sowas nicht zur Verfügung steht, kannst du das Problem imho mit einer Unterabfrage lösen, die ungefähr(!) so aussehen könnte:

            Code:
            SELECT
                e.Identnummer,
                e.Zeit,
                (SELECT count(*) + 1
                FROM Ergebnisse AS e1
                WHERE e1.Identnummer = e.Identnummer
                    AND e1.Zeit < e.Zeit
                    AND ...) AS Anzahl
            FROM Ergebnisse AS e
            WHERE ...
            ORDER BY Zeit
            Ich weiß nur nicht, ob das in MSSQL auch funktioniert.

            Gruß,

            Amica
            [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
            Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
            Super, danke!
            [/COLOR]

            Kommentar


            • #7
              Rekursive Ermittlung Anzahl Vorkommen mit MS-SQL

              Ist schon etwas her aber nachdem ich mir vorher die Finger wund gesucht hatte ist das genau die Lösung: kurz und schnell .

              Funktioniert unter MS-SQL 10.0 und wurde so implementiert:
              Code:
              SELECT ObjectName,
                  (SELECT  COUNT(ObjectName) AS anzahl
                  FROM     dbo.ControllerResults AS CR2
                  WHERE    (ControllerResults.ObjectName = ObjectName) AND (StartTime > '2014-01-01 11:35') AND (EndTime < '2014-01-31 11:35') AND (Stiction > '1')) AS anzahl, 
                  MIN(StartTime) AS StartTime, MIN(EndTime) AS EndTime
              FROM   dbo.ControllerResults AS ControllerResults
              WHERE  (StartTime >'2014-01-01 11:35') AND (EndTime < '2014-01-31 11:35') AND (Stiction > '1')
              GROUP BY ObjectName
              ORDER BY ObjectName
              Weiters werden hier alle Duplikate unterdrückt.
              Zuletzt geändert von bedankt; 04.02.2014, 09:04.

              Kommentar

              Lädt...
              X