![]() |
Leerer Datensatz bei SQL Abfrage
Ich habe eine Tabelle in der Datensätze stehen, die grundsätzlich 2 Preissummen mit unterschiedlichen Steuersätzen enthalten. Für den Report benötige ich aber die Summe über alle Datensätze nach Steuersatz sortiert. Dazu habe ich folgendes SQL Statement geschrieben:
Delphi-Quellcode:
Funktioniert zwar ganz gut, aber ich erhalte, wenn eine der Nettosummen 0 ist für diesen einen leeren Datensatz, so dass ich immer 2 Sätze in der Ergebnismenge habe. Jetzt habe ich auch versucht das obige SELECT - Statement in ein anderes SELECT Statement zu schachteln, das den leeren Satz wieder rausfiltert. Geschachtelte SELECT Anweisungen scheint lokal SQL aber nicht zu unterstützen, oder?
SELECT SUM(Netto1) AS SumNetto,
ST1 AS ST, SUM(MwST1) AS SummSteuer, SUM(Netto1)+SUM(MwSt1) AS Brutto WHERE Netto1 > 0 GROUP BY ST1 UNION SELECT SUM(Netto2) AS SumNetto, ST2 AS ST, SUM(MwST2) AS SummSteuer, SUM(Netto2)+SUM(MwSt2) AS Brutto WHERE Netto2 > 0 GROUP BY ST2 |
Meinst Du sowas mit verschachtelt ?
Zitat:
Code:
Dasselbe steht doch schon drin mit Netto1. Überschreibst Du Dir da nicht Dein SumNetto ???
SUM (Netto2) AS SumNetto
Gruß Hansa |
Hallo Hansa,
ich habe es so versucht:
Delphi-Quellcode:
Lokal SQL meldet dann, dass das zweite SELECT ungültig ist!?
SELECT [b]*[/b] FROM (
SELECT SUM(Netto1) AS SumNetto, ST1 AS ST, SUM(MwST1) AS SummSteuer, SUM(Netto1)+SUM(MwSt1) AS Brutto WHERE Netto1 > 0 GROUP BY ST1 UNION SELECT SUM(Netto2) AS SumNetto, ST2 AS ST, SUM(MwST2) AS SummSteuer, SUM(Netto2)+SUM(MwSt2) AS Brutto WHERE Netto2 > 0 GROUP BY ST2) WHERE ... Zitat:
|
Da hab ich noch was interessantes :
![]() Die Beispiele versteh sogar ich (fast). Gruß Hansa |
Hallo Mr. Spock 8)
Irgendwie vermisse ich hier SELECT-FROM Kombination. Also ich meine nach jedem SELECT sollte irgendwann auch FROM- Schlüsselwort auftauchen. Kurz vorbeigeschaut und schon weg... Gruß Paul Jr. |
Hallo Paul Jr,
schön wieder mal was von dir zu hören: Du hast natürlich recht, war ein Fehler beim hinschreiben im geposteten Code. Im Programm habe ich es richtig:
Delphi-Quellcode:
SELECT SUM(Netto1) AS SumNetto,
ST1 AS ST, SUM(MwST1) AS SummSteuer, SUM(Netto1)+SUM(MwSt1) AS Brutto [b]FROM RechListe[/b] WHERE Netto1 > 0 GROUP BY ST1 UNION SELECT SUM(Netto2) AS SumNetto, ST2 AS ST, SUM(MwST2) AS SummSteuer, SUM(Netto2)+SUM(MwSt2) AS Brutto [b]FROM RechListe[/b] WHERE Netto2 > 0 GROUP BY ST2 |
Also, Mr. Spock, deine SQL- Anweisung ist vollkommen richtig (unter Ms-SQL 2000)!
Ich habe Dein Problem nicht genau verstanden (welche Netto- Summe ist gleich 0? usw...) Gruß Paul Jr. |
Hallo Paul Jr,
die Datensätze in der Tabelle sind Rechnungen. Manche Rechnungen enthalten Positionen sowohl mit 7% als auch mit 16% Steuer. Wenn ich Rechnungen auswähle, bei denen mindestens eine von diesen Positionen zu beiden Steuersätzen enthält ist alles OK. Ist aber nur ein Steuersatz enthalten, erhalte ich trotzdem 2 Sätze in der Ergebnismenge. Der erste ist aber leer, hat also keinen Eintrag in irgendeinem Feld. Dieser Leersatz stört jetzt meine Ausgabe. |
Hallo Mr.Spock,
jetzt verstehe ich! Nun ja, so "auf die schnelle" weiß ich nicht... vielleicht probiere mit WHERE-Bedingung... z.B.: WHERE (Netto2 > 0) AND (NOT (Mwst2 is NULL)) Na ja Mr. Spock, dass war für's heute... kämpfe weiter... Ich zeige mich bald wieder Tschüß Paul Jr. |
Hi MrSpock,
wie das da aussieht ist das wieder so eine klassische Frage : "Macht das die DB, oder soll das mein Programm machen :?: " Ich habe zwar noch kein so richtiges Gefühl für die SQL Geschichten, aber in diesem Fall bin ich mir trotzdem ziemlich sicher, daß ich das da in Delphi machen würde. Ich mache, bzw. werde so etwas mit einem kleinen Array machen, d.h. zu jeder Position halte ich den Mwst.-Satz fest. Wenn ich sowieso die Rechn.-Positionen anzeigen /drucken muß, muß ich doch nur den Pos.-Betrag in einer Variablen dazuaddieren. Für 7 und 16% braucht man doch nur 2 real-Variablen. Eine Prüfung darauf ob eine / zwei <> 0 sind, ist wohl das kleinste Übel. Aber wahrscheinlich hast Du andere Gründe, es nicht so zu machen. Gruß Hansa |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:16 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz