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

Count Abfrage

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von TD2701, 16 November 2020.

  1. TD2701

    TD2701 Neuer Benutzer

    Hallo zusammen,

    ich habe folgende Abfrage:

    select t3.TrnspName, t.DocTime, cast (t2.Quantity as int) as Menge from ODLN t
    inner join OSHP t3 on t.TrnspCode=t3.TrnspCode
    inner Join DLN1 t2 on t.DocEntry=t2.DocEntry
    where t3.TrnspName IN ('Spedition (Paletten)', 'UPS Express Saver', 'UPS Standard','dpd')

    Die zeigt die Lieferscheine zu bestimmte Lieferart mit Anzahl von Artikelmenge und Generierungszeit. Ergebnis sieht so aus
    upload_2020-11-16_12-16-45.png

    Ich muss die Abfrage so verbessern dass es noch die Anzahl Positionen in jede Lieferschein (Spalte DocEntry) vom Tabelle DLN1 gezählt werden.

    Hab an so was gedacht (funktioniert aber nicht richtig weil ich natürlich gruppieren muss):

    select t3.TrnspName, t.DocTime, cast (t2.Quantity as int) as Menge, count (t2.DocEntry) as Anzahl_Positionen from ODLN t
    inner join OSHP t3 on t.TrnspCode=t3.TrnspCode
    inner Join DLN1 t2 on t.DocEntry=t2.DocEntry
    where t3.TrnspName IN ('Spedition (Paletten)', 'UPS Express Saver', 'UPS Standard','dpd')

    Könnt ihr mir hier helfen?

    Danke!

    Viele Grüße
     
  2. Tommi

    Tommi Datenbank-Guru

    Hallo TD2701.

    das kannst du ab SQL Server 2012 mit ensprechenden Fensterfunktionen lösen.
    Hier ein Beispiel, das zu deiner Abfrage passen sollte:

    Code:
    SELECT
    t3.TrnspName,
    t.DocTime,
    CAST (t2.Quantity as int) as Menge,
    ROW_NUMBER() OVER (PARTITION BY t2.DocEntry ORDER BY t.DocTime) as PositionNr,
    COUNT (*) OVER (PARTITION BY t2.DocEntry ORDER BY t2.DocEntry) as Anzahl_Positionen
    
    FROM ODLN t
    
    INNER JOIN OSHP t3
        ON t.TrnspCode=t3.TrnspCode
    
    INNER JOIN DLN1 t2
        ON t.DocEntry=t2.DocEntry
    
    WHERE t3.TrnspName IN ('Spedition (Paletten)', 'UPS Express Saver', 'UPS Standard','dpd')
    Die Spalte "Anzahl_Positionen" gibt dann die gesamte Anzahl an, die für den Wert DocEntry ermittelt werden kann.
    In der Spalte "PositionNr" wird eine Nummer generiert, die aufsteigend zum Wert DocTime für jeden Wert DocEntry (jeweils neu beginnend bei 1) gezählt wird.

    Wenn du, wie du selbst vorgeschlagen hast, dein Ergebnis gruppieren willst, also nur eine Zeile je DocEntry, musst du natürlich auch füe die nicht zu gruppierenden Zeilen Aggragationen verwenden (z.B.
    Code:
    SUM(CAST(ts.Quantity as int)) as Menge
    )

    Viele Grüße,
    Tommi
     
    Zuletzt bearbeitet: 17 November 2020
    Walter gefällt das.
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