Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Leerer Datensatz bei SQL Abfrage (https://www.delphipraxis.net/2698-leerer-datensatz-bei-sql-abfrage.html)

MrSpock 3. Feb 2003 10:29


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:
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
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?

Hansa 3. Feb 2003 10:56

Meinst Du sowas mit verschachtelt ?

Zitat:

select from
(select anrede, name, strasse ,ort from
Adresse
where name = 'xyz')
order by name,ort
Warum soll das nicht gehen ? Aber da fällt mir was auf :
Code:
SUM (Netto2) AS SumNetto
Dasselbe steht doch schon drin mit Netto1. Überschreibst Du Dir da nicht Dein SumNetto ???

Gruß
Hansa

MrSpock 3. Feb 2003 11:42

Hallo Hansa,

ich habe es so versucht:

Delphi-Quellcode:
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 ...
Lokal SQL meldet dann, dass das zweite SELECT ungültig ist!?

Zitat:

Überschreibst Du Dir da nicht Dein SumNetto ???
Nein, da es ja mit UNION verknüpft wird, dürfen die Namen gleich sein. Wie gesagt es funktioniert ja auch, wenn mehr als ein Steuersatz auftaucht. Ist aber nur einer da, erhalte ich "für diesen" einen leeren Datensatz.

Hansa 3. Feb 2003 12:03

Da hab ich noch was interessantes :

http://www.really-fine.com/SQL_union.html

Die Beispiele versteh sogar ich (fast).

Gruß
Hansa

Gast 3. Feb 2003 12:11

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.

MrSpock 3. Feb 2003 12:18

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

Gast 3. Feb 2003 12:36

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.

MrSpock 3. Feb 2003 12:50

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.

Gast 3. Feb 2003 12:56

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.

Hansa 3. Feb 2003 13:34

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 05:04 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz