AGB  ·  Datenschutz  ·  Impressum  







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

SQL-Programmierproblem

Offene Frage von "JesterX"
Ein Thema von JesterX · begonnen am 11. Aug 2003 · letzter Beitrag vom 11. Aug 2003
Antwort Antwort
JesterX

Registriert seit: 25. Jul 2003
Ort: Oldenburg, Niedersachsen
5 Beiträge
 
Delphi 6 Professional
 
#1

SQL-Programmierproblem

  Alt 11. Aug 2003, 10:14
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?
  Mit Zitat antworten Zitat
xbu58

Registriert seit: 10. Dez 2002
Ort: Bäretswil / Schweiz
121 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: SQL-Programmierproblem

  Alt 11. Aug 2003, 13:08
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
  Mit Zitat antworten Zitat
JesterX

Registriert seit: 25. Jul 2003
Ort: Oldenburg, Niedersachsen
5 Beiträge
 
Delphi 6 Professional
 
#3

Re: SQL-Programmierproblem

  Alt 11. Aug 2003, 13:56
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
Miniaturansicht angehängter Grafiken
delphi_838.jpg  
  Mit Zitat antworten Zitat
xbu58

Registriert seit: 10. Dez 2002
Ort: Bäretswil / Schweiz
121 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: SQL-Programmierproblem

  Alt 11. Aug 2003, 19:28
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
  Mit Zitat antworten Zitat
Antwort Antwort


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 10:23 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