Hallo,
ich habe ein Problem mit dem Erstellen einer Selektion.
Ich habe eine Tabelle mit Adressdaten und Spalten zu drei Zeitschriften (z1,z2,z3), die an die jeweiligen Empfänger gesendet werden sollen. Hinten dran ist eine Spalte mit einer laufenden Nummer. Diese laufende Nummer dient lediglich der Erkennung von doppelten Adressdaten, die durch ein Versenden von zwei unterschiedlichen Zeitschriften an eine Adresse verursacht werden. Somit kann ich jeweils mehrere (in diesem Fall bis zu drei) Etiketten für ein und dieselbe Adresse drucken.
Den Spalten, in denen Informationen über das Versenden der Zeitschriften stehen, habe ich entweder die Zahl 1 zugeordnet (–> soll gesendet werden), oder den Wert null (–>soll nicht gesendet werden).
Das heißt meine Tabelle, aus der ich die Daten selektiere, sieht zurzeit ungefähr so aus:
P_Nr | Name | Str | Hausnr | PLZ | Z1 | Z2 | Z3 | Lfd_nr
1 |Hr Käse |Gaudaweg |5 |55122 |1 |null |1 | 1 von 2
1 |Hr Käse |Gaudaweg |5 |55122 |1 |null |1 | 2 von 2
2 |Hr Trink |Durstigstr |18 |55119 |null |1 |null | 1 von 2
Blöderweise kann ich nun aber über die gesamten Datensätze keine Abfrage machen, die mir alle Datensätze zurückgibt für Zeitschrift 1 und 2. Also Etiketten nur für alle Z1=1 und Z2=2. Mir ist es nur möglich, entweder alle abzufragen, oder durch Modifizierung (ich habe einfach die Vermehrung der Zeilen einer gleichen P_Nr rückgängig gemacht) eine einzelne Zeitschrift.
Wie bekomme ich eine Abfrage hin, durch die ich nun nur alle Zeilen in der benötigten Menge zurückbekomme, aber nur für Zeitschrift 1 und 2 (bspw.) und nicht ebenfalls die Menge von Zeitschrift 3 hinzuaddiert wird ?
Mein SQL sieht zurzeit so aus. Da ich vorher noch einige Teile ranjoine (bspw. die Zeitschriftenversandinformationen ( 1 oder null) ), lasse ich mal einige temp tables weg, denn die Endabfrage hat eigentlich genügend Informationen:
select
agt_nr
,name
,zust
,str
,plz
,ort
,erfasst
,Z_1
,Z_2
,Z_3
,(h.Anzahl_h+1)::varchar|| ' von ' || (coalesce(tab2.z_1,0) + coalesce(tab2.z_2,0) + coalesce(tab2.z_3,0))::varchar as lfdnr
from tab2
LEFT JOIN (select Zehner+Einer as Anzahl_h,
from (select
hE.Dummyzahl as Einer
, 10* hZ.Dummyzahl as Zehner
from etk_hilfstabelle hE, etk_hilfstabelle hZ) subselect1
) h on (coalesce(tab2.z_1,0) + coalesce(tab2.z_2,0) + coalesce(tab2.z_3,0))::numeric >= (h.Anzahl_h+1)::numeric
order by plz,name,zust
Wenn ihr noch Informationen benötigt, sagt bescheid