Count Abfrage

TD2701

Neuer Benutzer
Beiträge
1
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
 
Werbung:
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:
Zurück
Oben