AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Leerer Datensatz bei SQL Abfrage
Thema durchsuchen
Ansicht
Themen-Optionen

Leerer Datensatz bei SQL Abfrage

Ein Thema von MrSpock · begonnen am 3. Feb 2003 · letzter Beitrag vom 3. Feb 2003
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#1

Leerer Datensatz bei SQL Abfrage

  Alt 3. Feb 2003, 10:29
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?
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#2
  Alt 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
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#3
  Alt 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.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#4
  Alt 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
  Mit Zitat antworten Zitat
Gast
(Gast)

n/a Beiträge
 
#5
  Alt 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.
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#6
  Alt 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
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Gast
(Gast)

n/a Beiträge
 
#7
  Alt 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.
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#8
  Alt 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.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Gast
(Gast)

n/a Beiträge
 
#9
  Alt 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.
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#10
  Alt 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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:50 Uhr.
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