Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL-Programmierproblem (https://www.delphipraxis.net/7385-sql-programmierproblem.html)

JesterX 11. Aug 2003 09:14


SQL-Programmierproblem
 
Hallo zusammen,
ich verzweifle an einem SQL-Script.
Ich möchte aus mehreren Tabellen die Werte für jeweils einen Kunden in einer Zeile zusammenfassen. Der Kunde hat zwei Kundennummern. Eine endet auf 9, die andere auf 0.
Abhängig von der Kundennummer sollen die Werte bei 0 in Spalte 1-3 oder bei 9 in Spalte 4-6 angezeigt werden. Hier ist das Skrpit was ich bis jetzt zusammengebracht habe:

SQL-Code:
select ' ',' ',' ',
       to_char(sum(decode (ldtu.ltut_ref, 1001,1,0))),
       to_char(sum(decode (ldtu.ltut_ref, 1007,1,0))),
       to_char(sum(decode (ldtu.ltut_ref, 1024,1,0))),
       substr(ldtu2.lcu_ident,4,4),
       lcust.lcu_name1,
       lcust.lcu_zipcode,
       lcust.lcu_city
from abl_user.ldespatch_tu ldtu, abl_user.ldespatch_tu ldtu2, abl_user.lcust lcust, abl_user.lroute lrou
where ldtu.lrou_ref= lrou.lrou_ref
and ldtu.ldtu_ref = ldtu2.ldtu_ref
and substr(lcust.lcu_ident,-1)='0'
and ldtu2.lcu_ident = lcust.lcu_ident
and to_char(lrou.lrou_departdate,'dd.mm.yyyy') = '04.08.2003'
and lrou.ldz_ident = '220'
group by substr(ldtu2.lcu_ident,4,4),lcust.lcu_name1,lcust.lcu_zipcode,lcust.lcu_city
Union
select to_char(sum(decode (ldtu.ltut_ref, 1001,1,0))),
       to_char(sum(decode (ldtu.ltut_ref, 1007,1,0))),
       to_char(sum(decode (ldtu.ltut_ref, 1024,1,0))),
       ' ',' ',' ',
       substr(ldtu2.lcu_ident,4,4),
       lcust.lcu_name1,
       lcust.lcu_zipcode,
       lcust.lcu_city
from abl_user.ldespatch_tu ldtu, abl_user.ldespatch_tu ldtu2, abl_user.lcust lcust, abl_user.lroute lrou
where ldtu.lrou_ref= lrou.lrou_ref
and ldtu.ldtu_ref = ldtu2.ldtu_ref
and substr(lcust.lcu_ident,-1)='9'
and ldtu2.lcu_ident = lcust.lcu_ident
and to_char(lrou.lrou_departdate,'dd.mm.yyyy') = '04.08.2003'
and lrou.ldz_ident = '220'
group by substr(ldtu2.lcu_ident,4,4),lcust.lcu_name1,lcust.lcu_zipcode,lcust.lcu_city
order by 4
Ich bekomme jedoch immer noch zwei Einträge pro Kunde.
Hat jemand eine Idee?

xbu58 11. Aug 2003 12:08

Re: SQL-Programmierproblem
 
Hallo JesterX

Der SQL-Befehl UNION fügt keine Datensätze zusammen! Er dient nur dazu, Daten von mehreren Tabellen in einem Resultset zurück zu geben. Er unterdrückt jedoch doppelte Datensätze, welche genau gleich sind (alle Felder haben den gleichen Inhalt), ausser es wird mit UNION ALL gearbeitet. Es gibt eigentlich nur zwei Möglichkeiten, Dein Problem auf SQL-Basis zu lösen.
1. Du arbeitest mit Temporär-Tabellen, wenn dass Dein DB-Server unterstützt.
2. Du arbeitest ohne UNION z.B.:
Code:
SELECT aa.Id,
       Feld11 = SUM(aa.Feld1), Feld12 = SUM(aa.Feld2),
       Feld21 = SUM(bb.Feld1), Feld22 = SUM(bb.Feld2)
FROM Tab1 aa, Tab2 bb
WHERE SUBSTR(aa.id,-1) = SUBSTR(bb.id,-1)
GROUP BY aa.Id
Falls in einer der Tabellen kein Datensatz vorhanden sein muss, musst Du das WHERE noch erweitern (z.B. OR bb.Id IS NULL) und bei dem Ausgabe-Feld Id mit CASE arbeiten!

Gruss
Xaver

JesterX 11. Aug 2003 12:56

Re: SQL-Programmierproblem
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Xaver,

ich habe mal einen Screenshot vom Ergebnis erstellt.
Hier noch mal mein Problem:
Ich habe eine Tabelle mit Kundenstammdaten.
Ich habe eine große Tabelle mit Bewegungsdaten.
Diese sind über eine RefNr miteinander verknüpft.
Da ich aber für jeden Kunden mehrere Kundennummern habe, möchte ich nun die Daten der Kundennummer die auf 0 endet in den ersten drei Spalten anzeigen und die der Kundennummer die auf 9 endet in den nächsten dreien.

Im Beispiel ist die siebte Spalte die KdNr.

Gruss Holger

xbu58 11. Aug 2003 18:28

Re: SQL-Programmierproblem
 
Hallo Holger

Es ist nicht ganz einfach ein Beispiel zusammen zu stellen, wenn man die Datenstrukturen nicht kennt. Grundsätzlich ist es aber so, dass Du nur zu einem Ergebnis von einem Datensatz/Kunde kommst, wenn alles in einem Select abgehandelt wird. Der Screen-Shut sieht für mich nach einem Problem in GROUP aus. Schick deshalb das SQL-Statement, mit welchem das Resultset vom Screen-Shut erzeugt wurde. Wenn Du willst, kannst Du mir auch einen Auszug der Daten senden (z.B. als Paradox- oder Excel-Tabellen) damit ich das Statement auf meinem MSSQL-Server austesten kann. So könnte ich Dir genau sagen, wie das Statement auszusehen hat.

Gruss
Xaver


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:11 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