Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

TSQL - Summe pro Feld als zusätzliche Spalte

Mitglied: CreamyCewie

CreamyCewie (Level 1) - Jetzt verbinden

20.05.2019, aktualisiert 16:13 Uhr, 265 Aufrufe, 5 Kommentare

Hallöchen.

Ich habe folgendes Select-Statement:

01.
select Belegtyp, AdressNr, Menge, Artikelnummer, Gesamtpreis as 'VK pro POS' from Belegp where Belegtyp = '0' and Datum = :Datum and Mitarbeiter  = :Vertreter  or Belegtyp = 'F' and Datum = :Datum and Mitarbeiter  = :Vertreter order by AdressNr
Mit diesem Statement hole ich mir alle DS aus 2 Tabellen, gefiltert nach ein paar Kriterien.

Als Ergebnissmenge bekome ich folgendes:
Belegtyp AdressNr Menge Artikelnummer VK pro POS
0 111048 10,00 2800_320 840,00
F 111048 1,00 3306 0,25
0 112116 1,00 1000 14,90
0 112116 3,00 1007 50,40
0 112116 5,00 1022 159,50
F 112116 3,00 1007 50,40
F 112116 5,00 1022 159,50
F 112116 1,00 3,13 14,90

Ergebniss ist soweit korrekt.
Nun brauche ich jedoch noch 2 Spalten die folgendes beinhalten:

1.) Ich brauche nun eine Spalte "Gesamt pro AdressNr" in der folgendes enthalten sein soll:
eine Summe aller "VK pro POS" (jedoch nur wenn Belegtyp = "F"), und zwar pro AdressNr.

2.) Ich brauche nun eine Spalte "Gesamt ALLE" in der folgendes enthalten sein soll:
eine Summe aller "VK pro POS" (jedoch nur wenn Belegtyp = "F"), egal welche AdressNr eingetragen ist

Zur Veranschaulichung, so sollte die Ergebnissmenge dann aussehen:

Belegtyp AdressNr Menge Artikelnummer VK pro POS Gesamt pro AdressNr Gesamt ALLE
0 111048 10,00 2800_320 840,00 0,25 225,05
F 111048 1,00 3306 0,25 0,25 225,05
0 112116 1,00 1000 14,90 224,80 225,05
0 112116 3,00 1007 50,40 224,80 225,05
0 112116 5,00 1022 159,50 224,80 225,05
F 112116 3,00 1007 50,40 224,80 225,05
F 112116 5,00 1022 159,50 224,80 225,05
F 112116 1,00 3,13 14,90 224,80 225,05

wie lassen sich diese 2 berechneten Spalten realisieren?

Lieben Dank!
Mitglied: Crusher79
20.05.2019, aktualisiert um 17:01 Uhr
Hi,

man nimmt verschachtleten SELECT. Habe greade keine Zeit es zu schreiben. Hier mal eine BAR / UNBAR Spalte für Kassenabrechnung.

Ggf. musst du auch NUL berücksichtigen.

Kurz: Geheimnis ist SELECT und SUM OVER () ! Hier musst du für das erste Beispiel natürlich mit SUM (VK pro POS ) OVER (PARTITION BY AdressNr) arbeiten!

Dann wird schon nach Adresse gruppiert und Du hast as richtige Ergebnis. Die Summe überalles ist natürlich einfacher.

Mach die 2 SELECT erstmal einzeln + WHERE Part. Dann kopierst du es einfach in deinen 1. SELECT mit rein.

01.
, ISNULL((SELECT TOP 1 SUM(Total) OVER() AS 'EC-Total' FROM[kpw_intra].[dbo].[eup] p WHERE PaymentType = '4' AND Datum = '20190520' ),0) AS 'EC_Karte'"
02.
, SUM(GesamtPreis) OVER() AS 'Ges_Umsatz', (SELECT TOP 1 Zeit FROM [kpw_intra].[dbo].[euc] WHERE Datum='20190520' order by Zeit desc) AS 'Zeit
03.
', (SELECT TOP 1 BonNr FROM [kpw_intra].[dbo].[euc] WHERE Datum='{0}' order by BonNr desc) AS 'BonNr'

Ok, habs doch nochmal probiert. Versucht mal das:

01.
select Belegtyp, AdressNr, Menge, Artikelnummer, Gesamtpreis as 'VK pro POS' 
02.
, (SELECT SUM (Gesamtpreis) OVER (PARTITION BY AdressNr) AS 'Gesamt pro AdressNr' FROM Belegp WHERE Belegtyp = "F")
03.
, (SELECT SUM (Gesamtpreis) OVER () AS 'Gesamt ALLE' FROM Belegp WHERE Belegtyp = "F")
04.
from Belegp where Belegtyp = '0' and Datum = :Datum and Mitarbeiter  = :Vertreter  or Belegtyp = 'F' and Datum = :Datum and Mitarbeiter  = :Vertreter order by AdressNr
Bitte warten ..
Mitglied: em-pie
20.05.2019, aktualisiert um 20:48 Uhr
Moin,

Variante 2 wäre:

01.
select 
02.
	Belegp.Belegtyp
03.
	, Belegp.AdressNr
04.
	, Belegp.Menge
05.
	, Belegp.Artikelnummer
06.
	, Belegp.Gesamtpreis as 'VK pro POS'
07.
	, ISNULL(sumadress.SumAdress, 0) As SumAdress
08.
	, ISNULL(sumbeleg.SumBelegF, 0) as SumBelegF
09.
from Belegp 
10.
where 
11.
	(Belegtyp = '0' and Datum = :Datum and Mitarbeiter  = :Vertreter)  
12.
	or (Belegtyp = 'F' and Datum = :Datum and Mitarbeiter  = :Vertreter) 
13.
LEFT JOIN (Select AdressNr, SUM(VK_pro_POS) as SUM_Adress WHERE Belegtyp = 'F' GROUP BY AdressNr ) as sumadress 
14.
	on Belegp.AdressNR = sumadress.AdressNr
15.
LEFT JOIN (Select Belegtyp, SUM(VK_pro_POS) as SumBelegF WHERE Belegtyp = 'F' GROUP BY Belegtyp ) as sumbeleg 
16.
	on Belegp.Belegtyp = sumadress.SumBelegF
17.
order by AdressNr
Durch die Joins muss das Subselect nicht bei jedem Datensatz "neugebildet" werden, wenn ich mich da recht erinnere. Denn eine Tabelle innerhalb eines Joins wird IMHO nur zum Zeitpunkt des "ersten" Aufrufes gebildet.
Wobei sich das nicht pauschal sagen lässt, da es ja immer von den zu behandelnden Daten(mengen) abhängt

Gruß
em-pie
Bitte warten ..
Mitglied: ukulele-7
20.05.2019 um 18:44 Uhr
Variante 2 ist auf jeden Fall zu bevorzugen.

Kritisieren würde ich das aber dennoch da einfach gar nicht sinnvoll gruppiert wird. Wer braucht denn eine Liste mit Positionen in der die Summe von Positionen in jeder Zeile steht? Das klingt für mich doch arg nach Fusch. Besser wäre vielleicht eine (oder zwei) Summenzeilen oder eine laufende Summe je nach Anwendungszweck.
Bitte warten ..
Mitglied: MadMax
20.05.2019 um 18:44 Uhr
Moin,

der Ansatz mit den Fensterfunktionen ist zwar richtig, aber es geht auch ohne zusätzliche Selects:
01.
select Belegtyp, AdressNr, Menge, Artikelnummer, Gesamtpreis as 'VK pro POS',
02.
	sum (case Belegtyp when 'F' then Gesamtpreis else 0 end) over (partition by AdressNr) as Gesamt_pro_AdressNr,
03.
	sum (case Belegtyp when 'F' then Gesamtpreis else 0 end) over () as Gesamt_ALLE
04.
from Belegp 
05.
where (Belegtyp = '0' and Datum = :Datum and Mitarbeiter  = :Vertreter)  or (Belegtyp = 'F' and Datum = :Datum and Mitarbeiter  = :Vertreter) 
06.
order by AdressNr
Gruß, Mad Max
Bitte warten ..
Mitglied: Crusher79
20.05.2019 um 22:20 Uhr
Aber es funktioniert....

Bei mir war es zusätzliche Übersicht zum Kassenystem (nur Bon-Drucker).

Bei 70-80 Belegen pro Tag reicht sowas völlig. Komt auch drauf an, welche Programmiersprache ggf. mitschwingt: C#, etc. oder ein 4 GL.

Bei der Variante ist das schöne, dass man mit einen einzigen Datensatz alles beisammen hat. Kommt immer drauf an, was man machen will. Das Ergebnis zumindest ist sauber.

Mutmaße beim Fragesteller, dass er auch eher mit geringen Datenmengen hantieren muss. Ist also doch durchaus brauchbar.
Bitte warten ..
Ähnliche Inhalte
Datenbanken
TSQL - Abfrage filtern
gelöst Frage von CreamyCewieDatenbanken11 Kommentare

Hallo. Ich habe in meiner Datenbank 3 Tabellen, aus denen ich mittels eines Select-Befehld in Kombination mit einem Inner ...

Datenbanken
TSQL - IF Exists
Frage von CreamyCewieDatenbanken4 Kommentare

Hallo, ich habe folgendes Problem: Ich habe eine SQL-Select-Abfrage. Diese sieht folgendermaßen aus: Diese Abfrage funktioniert, wenn es einen ...

Datenbanken
TSQL debuggen temporärer Tabellen
Frage von SachsenHessiDatenbanken3 Kommentare

Hallo, ich google mir lngsam die Finger wund. (Vielleicht habe ich aber auch nur die Frage falsch formuliert) Folgendes ...

Datenbanken

TSQL - Tabellen Export als Insert Statement

Frage von ooAlbertDatenbanken3 Kommentare

Hallo, ich möchte ganz gern eine Tabelle aus meiner Datenbank (SQL Server 2008 R2) programatisch exportieren, als Insert Statment. ...

Neue Wissensbeiträge
Microsoft
PowerShell script für LAPS
Information von kgborn vor 1 TagMicrosoft5 Kommentare

Kurzer Hinweis für Admins im AD-Umfeld. Ich bin die Tage auf das PowerShell Script der Woche “Local Administrator Password ...

Windows 10
Windows 10 bis Version 1803 und das Zwangs-Upgrade
Information von kgborn vor 1 TagWindows 10

Ich denke, die meisten Admins hier werden Systeme mit Windows 10 Enterprise einsetzen und Updates per WSUS/SCCM oder ähnlichem ...

Microsoft Office
BSI-Empfehlungen für die Office-Konfiguration
Information von kgborn vor 1 TagMicrosoft Office

Kurze Information für Admins, die Office verwalten. Das BSI hat einige Regeln für die Absicherung von Office-Konfigurationen veröffentlicht. Ich ...

Windows 10

Sandy-Bridge plus Nvidia plus Win10 1903 braucht Hotfix

Information von DerWoWusste vor 5 TagenWindows 101 Kommentar

Es gibt ein Problem in der seltenen Konstellation Nvidia-Grafikkarte/Sandy-Bridge-CPU/Win10v1903: die von Nvidia vorgeschlagenen Treiber lassen sich nicht installieren. verlinkt ...

Heiß diskutierte Inhalte
Windows 10
Windows 10 Logonskript greift nicht
Frage von xbast1xWindows 1019 Kommentare

Hallo zusammen, da sich die per GPO gemappten Laufwerke bei allen Usern schließen und das Problem sich nicht lösen ...

SAN, NAS, DAS
SFP+ 10GB Module kompatibel?
Frage von get--4SAN, NAS, DAS18 Kommentare

Grüße euch alle, ich bin in mehreren Schulen für die EDV verantwortlich. In einer Schule haben wir eine SAN ...

Entwicklung
Welche Programmiersprache ist das?
Frage von DschingisEntwicklung17 Kommentare

Hallo zusammen, unser ERP-System ermöglicht es, eigene Ansichten zu bearbeiten. Ich würde mich hier gerne weiterbilden. Kann mir jamand ...

Batch & Shell
Powershell Skript für Reg Datei ändern
gelöst Frage von SoccerdeluxBatch & Shell16 Kommentare

Hallo zusammen, ich muss auf einem Windows 10 Pc ein Skript ausführen lassen was sich alle 5 Minuten wiederholt. ...