Ankündigung

Einklappen
Keine Ankündigung bisher.

Count Funktion ohne Aggregation

Einklappen

Neue Werbung 2019

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

  • Count Funktion ohne Aggregation

    Hallo

    bin ein ziemlich SQL Nube und versuche gerade ein etwas kompliziertes Problem zu lösen. Ich habe eine Spale mit InvoiceNummern:

    Rechnung1
    Rechnung2 usw

    Jedoch kann es vorkommen das eine Number zweifach vorkommt:

    Rechnung1
    Rechnung2
    Rechnung2

    Was ich nun gerne hätte wäre eine Funktion die mir ohne wie bei Count mit verwendetem Group by die Nummern zusammenfasst und mir die gesamtzahl angibt sondern in der Art:

    Rechnung1 1
    Rechnung2 1
    Rechnung2 2
    Rechnung2 3

    Also das meine Einträge nicht aggregiert aber gezählt und quasi nummeriert werden.

    Ich hoffe ich habs einigermaßen verständlich erklärt und dass mir jemand hier weiterhelfen kann.


  • #2
    Ich verstehe dein Problem nicht.

    Wenn du nicht Gruppieren willst - dann lass' es doch einfach bleiben?
    Selektiere die Datensätze bzw. die Informationen daraus, die dich interessieren, und fertig.

    Zählen und Durchnummerieren ist dann etwas, was bei der anschliessenden Ausgabe des Abfrageergebnisses erfolgen kann.

    (Nummerierung schon im SQL-Statement geht auch, wenn man das haben will - dann muss man SQL-seitig Variablen verwenden.)

    Kommentar


    • #3
      Hier mal ein Beispiel als Diskussionsgrundlage. Mit Hilfe der MySQL User-Variablen wäre sowas zum Beispiel möglich.

      Code:
      CREATE TABLE rechnung (
       rechnung_id INT NOT NULL
      );
      
      INSERT INTO rechnung VALUES
      ( 1),( 2), (2), (3), (4), (4), (9);
      
      
      mysql> SELECT r.rechnung_id, r.sub_id
          ->   FROM ( SELECT @sub_id := 0, @merk_rechnung_id := 0) AS init,
          ->        ( SELECT r1.rechnung_id,
          ->                 IF(r1.rechnung_id <> @merk_rechnung_id,
          ->                    @sub_id :=1,
          ->                    @sub_id := @sub_id +1) AS sub_id,
          ->                 @merk_rechnung_id := r1.rechnung_id
          ->            FROM rechnung r1
          ->           ORDER BY r1.rechnung_id ) r
          -> ORDER BY r.rechnung_id, r.sub_id;
      +-------------+--------+
      | rechnung_id | sub_id |
      +-------------+--------+
      |           1 |      1 |
      |           2 |      1 |
      |           2 |      2 |
      |           3 |      1 |
      |           4 |      1 |
      |           4 |      2 |
      |           9 |      1 |
      +-------------+--------+
      7 rows in set (0.00 sec)
      
      mysql>
      Ein bißchen Tricky das Ganze, aber als Notlösung sinnvoll. Eine Rechnungnummer muss gemäß dem deutschen Recht eindeutig und lückenlos sein.

      Grüße
      Thomas

      Kommentar


      • #4
        Hallo Thomas,

        vielen Dank für deinen Input. Habe das Problem jetzt aber auf eine etwas andere Art lösen können.

        Ich habe aus der bestehenden Datenbank die LineNumbers in nvarchar umgewandelt und dadurch habe ich einen unique identifier erstellen können.

        Im Nachhinein betrachtet, habe ich bemerkt das ich zu wenig Informationen in meinem ersten Post gegeben habe (wird sich in Zukunft ändern).

        Trotzdem vielen Dank und ich bin sehr froh das in diesem Forum so kompetente Leute sind, die mir sicherlich in Zukunft helfen können und vlt bin ich ja selber mal soweit das ich helfen kann

        LG Markus

        Kommentar

        Lädt...
        X