source: trunk/import/norgis_alkis_pp/postcreate.de/views_exp_csv.sql @ 398

Revision 398, 36.8 KB checked in by frank.jaeger, 6 years ago (diff)

Feinkorrekturen an der Buchauskunft, Title von Links, "jüngste" Adresse zur Person.

Line 
1
2-- ===================================================================================
3--  ALKIS-PostGIS   Mapbender-Navigation und Buchauskunft fÃŒr NorGIS-ALKIS-Importer
4-- ===================================================================================
5
6-- Aufgabe:       Views bereit stellen fÃŒr den CSV-Export in der ALKIS-Buch-Auskunft.
7-- AusfÃŒhrung in: Step "postcreate.d" des ALKIS-Importers. Hier also nur Definitionen machen, keine Daten bearbeiten.
8
9--Stand
10--  2016-02-23
11--  2016-11-24 Index auf ax.person.nachnameoderfirma fÃŒr WMS Flurstuecke_kommunal
12--  2016-12-01 exp_csv: Fehlerkorrektur bei EntschlÃŒsselung der Buchungsart
13--             Optimierte Version (ohne Doppelverbindung)
14--  2017-02-23 Spalte "fall" aus View "flst_an_strasse" im View "exp_csv_str" ausgeben.
15--             Darauf basiert ein neuer Filter im Programm "alkisexport.php".
16--                      Sortierung FS-Kennz. repariert in Views "exp_csv" und "exp_csv_str"
17--  2017-10-10 Berechtigungen rausgenommen in getrennte Datei
18--  2017-12-06 Umbenennung von "x_classic2norgis.sql" nach "views_exp_csv.sql"
19--  2017-12-20 Beseitigung des Fehlers: Mehrere Adressen zur Person fuehren zu mehrfachen Zeilen (Wiederholung FlurstÃŒck und Flaeche ..)
20--             Es wird je Persoon nur noch die "letzte" Adresse verwendet (subquery).
21--             Der View "exp_csv_str" ist jetzt direkt als 4fach-UNION (2x2) codiert statt mit eingebettetem gespeicherten 2fach-Union.
22--             Hauptvorteil: Keine undurchsichtigen AbhÀngigkeiten. Ist auch etwas schneller.
23--  2017-12-20 Suche (Sortierung) 'letzte Adresse' nach "beginnt" statt nach "gml_id"
24
25-- ToDo:
26--  - die alten Übersichten "pp_flur", "pp_gemarkung" und "pp_gemeinde" wieder erzeugen
27--    Siehe Script: "pp_gebiete.sql" (FÃŒllen) und Teile von "pp_definition.sql" (DB-Struktur).
28
29
30-- I n d i c e s
31-- ============================
32-- Tabelle "ax_gemarkungsteilflur" sollte Such-Index erhalten auf "gemarkung".
33-- FÃŒr Auflistung aller Fluren zur Gemarkung in Script "alkisnav_fls", Function "EineGemarkung".
34
35
36-- Der WMS "Flurstuecke Kommunal" (aus View "st_flurst[gkz][e|r]") wird langsam, wenn er in einer kreisweiten Datenbank ausgefÃŒhrt wird.
37-- Das Filter-Feld benötigt einen Index:
38DROP INDEX if exists ax_person_nname;
39CREATE INDEX ax_person_nname
40  ON ax_person USING btree (nachnameoderfirma COLLATE pg_catalog."default");
41
42
43-- V i e w s
44-- ============================
45
46-- Bausteine fÃŒr andere Views:
47-- ---------------------------
48-- Ein View, der die Verbindung von FlurstÃŒck zur Straßentabelle fÃŒr zwei verschiedene FÀlle herstellt.
49-- Einmal ÃŒber die Lagebezeichnung MIT Hausnummer und einmal OHNE.
50-- Dies kann als "MittelstÃŒck" in den anderen Views eingefÃŒgt werden.
51
52   DROP VIEW if exists public.flst_an_strasse CASCADE; -- wird nicht mehr verwendet
53/*
54CREATE OR REPLACE VIEW public.flst_an_strasse
55AS
56  -- FlurstÃŒck >weistAuf> ax_lagebezeichnungMIThausnummer <JOIN> ax_lagebezeichnungkatalogeintrag
57  SELECT fm.gml_id AS fsgml,
58         sm.gml_id AS stgml,                 -- Filter: gml_id der Straße
59         'm' AS fall                         -- SÀtze unterschieden: Mit HsNr
60    FROM ax_flurstueck fm                    -- FlurstÃŒck Mit
61    JOIN ax_lagebezeichnungmithausnummer lm  -- Lage MIT
62      ON lm.gml_id = ANY (fm.weistauf)
63    JOIN ax_lagebezeichnungkatalogeintrag sm
64      ON lm.land=sm.land AND lm.regierungsbezirk=sm.regierungsbezirk AND lm.kreis=sm.kreis AND lm.gemeinde=sm.gemeinde AND lm.lage=sm.lage
65   WHERE lm.endet IS NULL AND fm.endet IS NULL -- nichts Historisches
66 UNION
67  -- FlurstÃŒck >zeigtAuf> ax_lagebezeichnungOHNEhausnummer <JOIN> ax_lagebezeichnungkatalogeintrag
68  SELECT fo.gml_id AS fsgml,
69         so.gml_id AS stgml,                 -- Filter: gml_id der Straße
70         'o' AS fall                         -- SÀtze unterschieden: Ohne HsNr
71    FROM ax_flurstueck fo                    -- FlurstÃŒck OHNE
72    JOIN ax_lagebezeichnungohnehausnummer lo -- Lage OHNE
73      ON lo.gml_id = ANY (fo.zeigtauf)
74    JOIN ax_lagebezeichnungkatalogeintrag so -- Straße OHNE
75      ON lo.land=so.land AND lo.regierungsbezirk=so.regierungsbezirk AND lo.kreis=so.kreis AND lo.gemeinde=so.gemeinde AND lo.lage=so.lage
76   WHERE lo.endet IS NULL AND fo.endet IS NULL; -- nichts Historisches
77
78COMMENT ON VIEW public.flst_an_strasse
79 IS 'ALKIS-Beziehung von FlurstÃŒck zu Straßentabelle. UNION-Zusammenfassung der FÀlle MIT und OHNE Hausnummer.';
80*/
81
82
83-- Generelle Export-Struktur "FlurstÃŒck - Buchung - Grundbuch - Person"
84-- --------------------------------------------------------------------
85-- Wird benötigt im Auskunft-Modul "alkisexport.php":
86-- Je nach aufrufendem Modul wird der Filter (WHERE) an anderer Stelle gesetzt (gml_id von FS, GB oder Pers.)
87-- FÃŒr Filter nach "Straße" siehe die nachfolgende Sonderversion "exp_csv_str".
88
89-- Problem / Konflikt:
90-- Es kann nur eine lineare Struktur aus Spalten und Zeilen exportiert werden.
91-- Wenn nicht nur die Daten des Ausgangs-Objektes exportiert werden, sondern auch verbundene Tabellen in
92-- einer 1:N-Struktur, dann verdoppeln sich Zeileninhalte und es werden redundante Daten erzeugt.
93-- Diese Redundanzen mÃŒssen vom dem Programm gefiltert werden, das die Daten ÃŒber eine Schnittstelle einliest.
94-- Anwendungs-Beispiel: Abrechnung von AnliegerbeitrÀgen.
95
96DROP VIEW IF EXISTS exp_csv;
97CREATE OR REPLACE VIEW exp_csv
98AS
99 SELECT -- Fall: einfache Buchung (ohne "Recht an")
100  -- F l u r s t ÃŒ c k
101    f.gml_id                             AS fsgml,       -- möglicher Filter FlurstÃŒcks-GML-ID
102    f.flurstueckskennzeichen             AS fs_kennz,
103    f.gemarkungsnummer,                                  -- Teile des FS-Kennz. noch mal einzeln
104    f.flurnummer, f.zaehler, f.nenner,
105    f.amtlicheflaeche                    AS fs_flae,
106    g.bezeichnung                        AS gemarkung,
107  -- G r u n d b u c h
108    gb.gml_id                            AS gbgml,       -- möglicher Filter Grundbuch-GML-ID
109    gb.bezirk                            AS gb_bezirk,
110    gb.buchungsblattnummermitbuchstabenerweiterung AS gb_blatt,
111    z.bezeichnung                        AS beznam,      -- GB-Bezirks-Name
112  -- B u c h u n g s s t e l l e  (GrundstÃŒck)
113    s.laufendenummer                     AS bu_lfd,      -- BVNR
114    '=' || s.zaehler || '/' || s.nenner  AS bu_ant,      -- als Excel-Formel (nur bei Wohnungsgrundbuch JOIN ÃŒber 'Recht an')
115    s.buchungsart,                                       -- verschlÃŒsselt
116    wb.v                                 AS bu_art,      -- Buchungsart entschlÃŒsselt
117  -- N a m e n s N u m m e r  (Normalfall mit Person)
118    nn.laufendenummernachdin1421         AS nam_lfd,
119    '=' || nn.zaehler|| '/' || nn.nenner AS nam_ant,     -- als Excel-Formel
120  -- R e c h t s g e m e i n s c h a f t  (Sonderfall von Namensnummer, ohne Person, ohne Nummer)
121    rg.artderrechtsgemeinschaft          AS nam_adr,
122    rg.v                                 AS nam_adrv,    -- Art der Rechtsgem. - Value zum Key
123    rg.beschriebderrechtsgemeinschaft    AS nam_bes,
124  -- P e r s o n
125    p.gml_id                             AS psgml,       -- möglicher Filter Personen-GML-ID
126    p.anrede,                                            -- Anrede key
127    wp.v                                 AS anrv,        -- Anrede Value zum Key
128    p.vorname,
129    p.namensbestandteil,
130    p.nachnameoderfirma,                                 -- Familienname
131    p.geburtsdatum,
132  -- A d r e s s e  der Person
133    a.postleitzahlpostzustellung         AS plz,
134    a.ort_post                           AS ort,         -- Anschreifenzeile 1: PLZ+Ort
135    a.strasse,  a.hausnummer,                            -- Anschriftenzeile 2: Straße+HsNr
136    a.bestimmungsland                    AS land
137   FROM ax_flurstueck    f               -- FlurstÃŒck
138  JOIN ax_gemarkung g                   -- entschlÃŒsseln
139    ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer
140  JOIN ax_buchungsstelle s              -- FS >istGebucht> Buchungstelle
141    ON f.istgebucht = s.gml_id
142  JOIN ax_buchungsblatt  gb             -- Buchung >istBestandteilVon> Grundbuchblatt
143    ON gb.gml_id = s.istbestandteilvon
144  JOIN ax_buchungsblattbezirk z
145    ON gb.land=z.land AND gb.bezirk=z.bezirk
146  JOIN ax_namensnummer nn               -- Blatt <istBestandteilVon< NamNum
147    ON gb.gml_id = nn.istbestandteilvon
148  JOIN ax_person p                      -- NamNum >benennt> Person
149    ON p.gml_id = nn.benennt
150  LEFT JOIN ax_anschrift a              -- nur die "letzte" Anschrift zur Person verwenden
151    ON a.gml_id = (SELECT gml_id FROM ax_anschrift an WHERE an.gml_id = ANY(p.hat) AND an.endet IS NULL ORDER BY an.beginnt DESC LIMIT 1)
152  -- E n t s c h l ÃŒ s s e l n:
153  LEFT JOIN alkis_wertearten wp         -- EntschlÃŒsseln "Person - Anrede"
154    ON cast(p.anrede AS character varying) = wp.k
155   AND wp.element = 'ax_person'
156   AND wp.bezeichnung = 'anrede'
157  LEFT JOIN alkis_wertearten wb         -- EntschlÃŒsseln "Buchungsart"
158    ON cast(s.buchungsart AS character varying) = wb.k
159 -- buchungsart = integer / .k  = char 4stellig
160   AND wb.element = 'ax_buchungsstelle'
161   AND wb.bezeichnung = 'buchungsart'
162  -- 2mal "LEFT JOIN" verdoppelt die Zeile in der Ausgabe. Darum als Subquery in Spalten packen:
163  -- Noch mal "GB -> NamNum", aber dieses Mal fÃŒr "Rechtsgemeinschaft".
164  -- Kommt max. 1 mal je GB vor und hat keine Relation auf Person.
165  LEFT JOIN
166   ( SELECT gr.gml_id, r.artderrechtsgemeinschaft, r.beschriebderrechtsgemeinschaft, wr.v
167       FROM ax_namensnummer r
168       JOIN ax_buchungsblatt gr
169         ON r.istbestandteilvon = gr.gml_id -- Blatt <istBestandteilVon< NamNum (Rechtsgemeinschaft)
170      LEFT JOIN alkis_wertearten wr
171        ON cast(r.artderrechtsgemeinschaft AS character varying)=wr.k AND wr.element='ax_namensnummer' AND wr.bezeichnung='artderrechtsgemeinschaft'
172      WHERE NOT r.artderrechtsgemeinschaft IS NULL ) AS rg -- Rechtsgemeinschaft
173   ON rg.gml_id = gb.gml_id  -- zum GB
174  WHERE f.endet IS NULL AND s.endet IS NULL and gb.endet IS NULL and nn.endet IS NULL AND p.endet IS NULL
175---------
176  UNION
177---------
178 SELECT  -- Fall: "Recht an"
179  -- F l u r s t ÃŒ c k
180    f.gml_id                             AS fsgml,       -- möglicher Filter FlurstÃŒcks-GML-ID
181    f.flurstueckskennzeichen             AS fs_kennz,
182    f.gemarkungsnummer,                                  -- Teile des FS-Kennz. noch mal einzeln
183    f.flurnummer, f.zaehler, f.nenner,
184    f.amtlicheflaeche                    AS fs_flae,
185    g.bezeichnung                        AS gemarkung,
186  -- G r u n d b u c h
187    gb.gml_id                            AS gbgml,       -- möglicher Filter Grundbuch-GML-ID
188    gb.bezirk                            AS gb_bezirk,
189    gb.buchungsblattnummermitbuchstabenerweiterung AS gb_blatt,
190    z.bezeichnung                        AS beznam,      -- GB-Bezirks-Name
191  -- B u c h u n g s s t e l l e  (GrundstÃŒck)
192    s.laufendenummer                     AS bu_lfd,      -- BVNR
193    '=' || s.zaehler || '/' || s.nenner  AS bu_ant,      -- als Excel-Formel (nur bei Wohnungsgrundbuch JOIN ÃŒber 'Recht an')
194    s.buchungsart,                                       -- verschlÃŒsselt
195    wb.v                                 AS bu_art,      -- Buchungsart entschlÃŒsselt
196  -- N a m e n s N u m m e r  (Normalfall mit Person)
197    nn.laufendenummernachdin1421         AS nam_lfd,
198    '=' || nn.zaehler|| '/' || nn.nenner AS nam_ant,     -- als Excel-Formel
199  -- R e c h t s g e m e i n s c h a f t  (Sonderfall von Namensnummer, ohne Person, ohne Nummer)
200    rg.artderrechtsgemeinschaft          AS nam_adr,
201    rg.v                                 AS nam_adrv,    -- Art der Rechtsgem. - Value zum Key
202    rg.beschriebderrechtsgemeinschaft    AS nam_bes,
203  -- P e r s o n
204    p.gml_id                             AS psgml,       -- möglicher Filter Personen-GML-ID
205    p.anrede,                                            -- Anrede key
206    wp.v                                 AS anrv,        -- Anrede Value zum Key
207    p.vorname,
208    p.namensbestandteil,
209    p.nachnameoderfirma,                                 -- Familienname
210    p.geburtsdatum,
211  -- A d r e s s e  der Person
212    a.postleitzahlpostzustellung         AS plz,
213    a.ort_post                           AS ort,         -- Anschreifenzeile 1: PLZ+Ort
214    a.strasse,  a.hausnummer,                            -- Anschriftenzeile 2: Straße+HsNr
215    a.bestimmungsland                    AS land
216  FROM ax_flurstueck f                  -- FlurstÃŒck
217  JOIN ax_gemarkung g                   -- entschlÃŒsseln
218    ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer
219  -- FS >istGebucht> Buchungstelle  <an<  Buchungstelle
220 -- Variante mit 2 Buchungs-Stellen (Recht An)
221  JOIN ax_buchungsstelle dien           -- dienende Buchung
222    ON f.istgebucht = dien.gml_id
223  JOIN ax_buchungsstelle s              -- herrschende Buchung
224    ON dien.gml_id = ANY (s.an)         -- hat Recht an
225  JOIN ax_buchungsblatt  gb             -- Buchung >istBestandteilVon> Grundbuchblatt
226    ON gb.gml_id = s.istbestandteilvon
227  JOIN ax_buchungsblattbezirk z
228    ON gb.land=z.land AND gb.bezirk=z.bezirk
229  JOIN ax_namensnummer nn               -- Blatt <istBestandteilVon< NamNum
230    ON gb.gml_id = nn.istbestandteilvon
231  JOIN ax_person p                      -- NamNum >benennt> Person
232    ON p.gml_id = nn.benennt
233  LEFT JOIN ax_anschrift a               -- nur die "letzte" Anschrift zur Person verwenden
234    ON a.gml_id = (SELECT gml_id FROM ax_anschrift an WHERE an.gml_id = ANY(p.hat) AND an.endet IS NULL ORDER BY an.beginnt DESC LIMIT 1)
235  -- E n t s c h l ÃŒ s s e l n:
236  LEFT JOIN alkis_wertearten wp         -- EntschlÃŒsseln "Person - Anrede"
237    ON cast(p.anrede AS character varying)=wp.k AND wp.element='ax_person' AND wp.bezeichnung='anrede'
238  LEFT JOIN alkis_wertearten wb         -- EntschlÃŒsseln "Buchungsart"
239    ON cast(s.buchungsart AS character varying) = wb.k
240   AND wb.element = 'ax_buchungsstelle'
241   AND wb.bezeichnung = 'buchungsart'
242  LEFT JOIN
243   ( SELECT gr.gml_id, r.artderrechtsgemeinschaft, r.beschriebderrechtsgemeinschaft, wr.v
244       FROM ax_namensnummer r
245       JOIN ax_buchungsblatt gr
246         ON r.istbestandteilvon = gr.gml_id -- Blatt <istBestandteilVon< NamNum (Rechtsgemeinschaft)
247      LEFT JOIN alkis_wertearten wr
248        ON cast(r.artderrechtsgemeinschaft AS character varying)=wr.k AND wr.element='ax_namensnummer' AND wr.bezeichnung='artderrechtsgemeinschaft'
249      WHERE NOT r.artderrechtsgemeinschaft IS NULL ) AS rg -- Rechtsgemeinschaft
250   ON rg.gml_id = gb.gml_id  -- zum GB
251  WHERE f.endet IS NULL AND s.endet IS NULL and gb.endet IS NULL and nn.endet IS NULL AND p.endet IS NULL
252    AND dien.endet IS NULL
253
254ORDER BY fs_kennz,   -- f.flurstueckskennzeichen,
255      -- fsgml,     
256         gb_bezirk,  -- gb.bezirk,
257         gb_blatt,   -- gb.buchungsblattnummermitbuchstabenerweiterung,
258         bu_lfd,     -- s.laufendenummer,
259         nam_lfd;    -- nn.laufendenummernachdin1421
260
261COMMENT ON VIEW exp_csv
262 IS 'View fÃŒr einen CSV-Export aus der Buchauskunft mit alkisexport.php. Generelle Struktur. FÃŒr eine bestimmte gml_id noch den Filter setzen.';
263
264
265-- Eine Variante des View "exp_csv":
266-- Hier wird zusÀtzlich die Lagebezeichnung zum FlurstÌck angebunden in den Varianten MIT/OHNE Hausnummer.
267-- Der Filter "WHERE stgml= " auf die "gml_id" von "ax_lagebezeichnungkatalogeintrag" sollte gesetzt werden,
268-- um nur die FlurstÃŒcke zu bekommen, die an einer Straße liegen.
269
270DROP VIEW IF EXISTS exp_csv_str;
271
272CREATE OR REPLACE VIEW exp_csv_str
273AS      -- Version mit 4fach-UNION (2x2 FÀlle) statt eingebauter View "flst_an_strasse"
274 SELECT -- Fall 1: einfache Buchung (ohne Recht an)  // Lagebezeichnung MIT Hausnummer
275    sm.gml_id                            AS stgml,       -- Filter: gml_id der Straße aus "ax_lagebezeichnungkatalogeintrag"
276    'm'                                  AS fall,        -- SÀtze unterschieden: MIT HsNr
277  -- F l u r s t ÃŒ c k
278    f.gml_id                             AS fsgml,       -- möglicher Filter FlurstÃŒcks-GML-ID
279    f.flurstueckskennzeichen             AS fs_kennz,
280    f.gemarkungsnummer,                                  -- Teile des FS-Kennz. noch mal einzeln
281    f.flurnummer, f.zaehler, f.nenner,
282    f.amtlicheflaeche                    AS fs_flae,
283    g.bezeichnung                        AS gemarkung,
284  -- G r u n d b u c h
285  --gb.gml_id                            AS gbgml,       -- möglicher Filter Grundbuch-GML-ID
286    gb.bezirk                            AS gb_bezirk,
287    gb.buchungsblattnummermitbuchstabenerweiterung AS gb_blatt,
288    z.bezeichnung                        AS beznam,      -- GB-Bezirks-Name
289  -- B u c h u n g s s t e l l e  (GrundstÃŒck)
290    s.laufendenummer                     AS bu_lfd,      -- BVNR
291    '=' || s.zaehler || '/' || s.nenner  AS bu_ant,      -- als Excel-Formel (nur bei Wohnungsgrundbuch JOIN ÃŒber 'Recht an')
292    s.buchungsart,                                       -- verschlÃŒsselt
293    wb.v                                 AS bu_art,      -- Buchungsart entschlÃŒsselt
294  -- N a m e n s N u m m e r  (Normalfall mit Person)
295    nn.laufendenummernachdin1421         AS nam_lfd,
296    '=' || nn.zaehler|| '/' || nn.nenner AS nam_ant,     -- als Excel-Formel
297  -- R e c h t s g e m e i n s c h a f t  (Sonderfall von Namensnummer, ohne Person, ohne Nummer)
298    rg.artderrechtsgemeinschaft          AS nam_adr,
299    rg.v                                 AS nam_adrv,    -- Art der Rechtsgem. - Value zum Key
300    rg.beschriebderrechtsgemeinschaft    AS nam_bes,
301  -- P e r s o n
302  --p.gml_id                             AS psgml,       -- möglicher Filter Personen-GML-ID
303    p.anrede,                                            -- Anrede key
304    wp.v                                 AS anrv,        -- Anrede Value zum Key
305    p.vorname,
306    p.namensbestandteil,
307    p.nachnameoderfirma,                                 -- Familienname
308    p.geburtsdatum,
309  -- A d r e s s e  der Person
310    a.postleitzahlpostzustellung         AS plz,
311    a.ort_post                           AS ort,         -- Anschriftenzeile 1: PLZ+Ort
312    a.strasse,  a.hausnummer,                            -- Anschriftenzeile 2: Straße+HsNr
313    a.bestimmungsland                    AS land
314  FROM ax_flurstueck    f               -- FlurstÃŒck
315  -- FlurstÃŒck >weistAuf> ax_lagebezeichnungMIThausnummer <JOIN> ax_lagebezeichnungkatalogeintrag
316  JOIN ax_lagebezeichnungmithausnummer lm -- Lage MIT
317    ON lm.gml_id = ANY (f.weistauf)
318  JOIN ax_lagebezeichnungkatalogeintrag sm
319   ON lm.land=sm.land AND lm.regierungsbezirk=sm.regierungsbezirk AND lm.kreis=sm.kreis AND lm.gemeinde=sm.gemeinde AND lm.lage=sm.lage
320   JOIN ax_gemarkung g                   -- entschlÃŒsseln
321    ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer
322  JOIN ax_buchungsstelle s              -- FS >istGebucht> Buchungstelle
323    ON f.istgebucht = s.gml_id
324  JOIN ax_buchungsblatt  gb             -- Buchung >istBestandteilVon> Grundbuchblatt
325    ON gb.gml_id = s.istbestandteilvon
326  JOIN ax_buchungsblattbezirk z
327    ON gb.land=z.land AND gb.bezirk=z.bezirk
328  JOIN ax_namensnummer nn               -- Blatt <istBestandteilVon< NamNum
329    ON gb.gml_id = nn.istbestandteilvon
330  JOIN ax_person p                      -- NamNum >benennt> Person
331    ON p.gml_id = nn.benennt
332  LEFT JOIN ax_anschrift a              -- nur die "letzte" Anschrift zur Person verwenden
333    ON a.gml_id = (SELECT gml_id FROM ax_anschrift an WHERE an.gml_id = ANY(p.hat) AND an.endet IS NULL ORDER BY an.beginnt DESC LIMIT 1)
334  -- E n t s c h l ÃŒ s s e l n:
335  LEFT JOIN alkis_wertearten wp         -- EntschlÃŒsseln "Person - Anrede"
336    ON cast(p.anrede AS character varying) = wp.k
337   AND wp.element = 'ax_person'
338   AND wp.bezeichnung = 'anrede'
339  LEFT JOIN alkis_wertearten wb         -- EntschlÃŒsseln "Buchungsart"
340    ON cast(s.buchungsart AS character varying) = wb.k
341 -- buchungsart = integer / .k  = char 4stellig
342   AND wb.element = 'ax_buchungsstelle'
343   AND wb.bezeichnung = 'buchungsart'
344  -- 2mal "LEFT JOIN" verdoppelt die Zeile in der Ausgabe. Darum als Subquery in Spalten packen:
345  -- Noch mal "GB -> NamNum", aber dieses Mal fÃŒr "Rechtsgemeinschaft".
346  -- Kommt max. 1 mal je GB vor und hat keine Relation auf Person.
347  LEFT JOIN
348   ( SELECT gr.gml_id, r.artderrechtsgemeinschaft, r.beschriebderrechtsgemeinschaft, wr.v
349       FROM ax_namensnummer r
350       JOIN ax_buchungsblatt gr
351         ON r.istbestandteilvon = gr.gml_id -- Blatt <istBestandteilVon< NamNum (Rechtsgemeinschaft)
352      LEFT JOIN alkis_wertearten wr
353        ON cast(r.artderrechtsgemeinschaft AS character varying)=wr.k AND wr.element='ax_namensnummer' AND wr.bezeichnung='artderrechtsgemeinschaft'
354      WHERE NOT r.artderrechtsgemeinschaft IS NULL ) AS rg -- Rechtsgemeinschaft
355   ON rg.gml_id = gb.gml_id  -- zum GB
356  WHERE f.endet IS NULL AND s.endet IS NULL and gb.endet IS NULL and nn.endet IS NULL AND p.endet IS NULL AND lm.endet IS NULL 
357---------
358  UNION
359---------
360 SELECT -- Fall 2: 2 Buchungs-Stellen (Recht An)  //  Lagebezeichnung MIT Hausnummer
361    sm.gml_id                            AS stgml,       -- Filter: gml_id der Straße aus "ax_lagebezeichnungkatalogeintrag"
362    'm'                                  AS fall,        -- SÀtze unterschieden: MIT HsNr
363  -- F l u r s t ÃŒ c k
364    f.gml_id                             AS fsgml,       -- möglicher Filter FlurstÃŒcks-GML-ID
365    f.flurstueckskennzeichen             AS fs_kennz,
366    f.gemarkungsnummer,                                  -- Teile des FS-Kennz. noch mal einzeln
367    f.flurnummer, f.zaehler, f.nenner,
368    f.amtlicheflaeche                    AS fs_flae,
369    g.bezeichnung                        AS gemarkung,
370  -- G r u n d b u c h
371  --gb.gml_id                            AS gbgml,       -- möglicher Filter Grundbuch-GML-ID
372    gb.bezirk                            AS gb_bezirk,
373    gb.buchungsblattnummermitbuchstabenerweiterung AS gb_blatt,
374    z.bezeichnung                        AS beznam,      -- GB-Bezirks-Name
375  -- B u c h u n g s s t e l l e  (GrundstÃŒck)
376    s.laufendenummer                     AS bu_lfd,      -- BVNR
377    '=' || s.zaehler || '/' || s.nenner  AS bu_ant,      -- als Excel-Formel (nur bei Wohnungsgrundbuch JOIN ÃŒber 'Recht an')
378    s.buchungsart,                                       -- verschlÃŒsselt
379    wb.v                                 AS bu_art,      -- Buchungsart entschlÃŒsselt
380  -- N a m e n s N u m m e r  (Normalfall mit Person)
381    nn.laufendenummernachdin1421         AS nam_lfd,
382    '=' || nn.zaehler|| '/' || nn.nenner AS nam_ant,     -- als Excel-Formel
383  -- R e c h t s g e m e i n s c h a f t  (Sonderfall von Namensnummer, ohne Person, ohne Nummer)
384    rg.artderrechtsgemeinschaft          AS nam_adr,
385    rg.v                                 AS nam_adrv,    -- Art der Rechtsgem. - Value zum Key
386    rg.beschriebderrechtsgemeinschaft    AS nam_bes,
387  -- P e r s o n
388  --p.gml_id                             AS psgml,       -- möglicher Filter Personen-GML-ID
389    p.anrede,                                            -- Anrede key
390    wp.v                                 AS anrv,        -- Anrede Value zum Key
391    p.vorname,
392    p.namensbestandteil,
393    p.nachnameoderfirma,                                 -- Familienname
394    p.geburtsdatum,
395   -- A d r e s s e  der Person
396    a.postleitzahlpostzustellung         AS plz,
397    a.ort_post                           AS ort,         -- Anschriftenzeile 1: PLZ+Ort
398    a.strasse,  a.hausnummer,                            -- Anschriftenzeile 2: Straße+HsNr
399    a.bestimmungsland                    AS land
400  FROM ax_flurstueck f                  -- FlurstÃŒck
401  -- FlurstÃŒck >weistAuf> ax_lagebezeichnungMIThausnummer <JOIN> ax_lagebezeichnungkatalogeintrag
402  JOIN ax_lagebezeichnungmithausnummer lm  -- Lage MIT
403    ON lm.gml_id = ANY (f.weistauf)
404  JOIN ax_lagebezeichnungkatalogeintrag sm
405    ON lm.land=sm.land AND lm.regierungsbezirk=sm.regierungsbezirk AND lm.kreis=sm.kreis AND lm.gemeinde=sm.gemeinde AND lm.lage=sm.lage
406  JOIN ax_gemarkung g                   -- entschlÃŒsseln
407    ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer
408  -- FS >istGebucht> Buchungstelle  <an<  Buchungstelle
409 -- Variante mit 2 Buchungs-Stellen (Recht An)
410  JOIN ax_buchungsstelle dien           -- dienende Buchung
411    ON f.istgebucht = dien.gml_id
412  JOIN ax_buchungsstelle s              -- herrschende Buchung
413    ON dien.gml_id = ANY (s.an)         -- hat Recht an
414  JOIN ax_buchungsblatt  gb             -- Buchung >istBestandteilVon> Grundbuchblatt
415    ON gb.gml_id = s.istbestandteilvon
416  JOIN ax_buchungsblattbezirk z
417    ON gb.land=z.land AND gb.bezirk=z.bezirk
418  JOIN ax_namensnummer nn               -- Blatt <istBestandteilVon< NamNum
419    ON gb.gml_id = nn.istbestandteilvon
420  JOIN ax_person p                      -- NamNum >benennt> Person
421    ON p.gml_id = nn.benennt
422  LEFT JOIN ax_anschrift a              -- nur die "letzte" Anschrift zur Person verwenden
423    ON a.gml_id = (SELECT gml_id FROM ax_anschrift an WHERE an.gml_id = ANY(p.hat) AND an.endet IS NULL ORDER BY an.beginnt DESC LIMIT 1)
424  -- E n t s c h l ÃŒ s s e l n:
425  LEFT JOIN alkis_wertearten wp         -- EntschlÃŒsseln "Person - Anrede"
426    ON cast(p.anrede AS character varying)=wp.k AND wp.element='ax_person' AND wp.bezeichnung='anrede'
427  LEFT JOIN alkis_wertearten wb         -- EntschlÃŒsseln "Buchungsart"
428    ON cast(s.buchungsart AS character varying) = wb.k
429   AND wb.element = 'ax_buchungsstelle'
430   AND wb.bezeichnung = 'buchungsart'
431  LEFT JOIN
432   ( SELECT gr.gml_id, r.artderrechtsgemeinschaft, r.beschriebderrechtsgemeinschaft, wr.v
433       FROM ax_namensnummer r
434       JOIN ax_buchungsblatt gr
435         ON r.istbestandteilvon = gr.gml_id -- Blatt <istBestandteilVon< NamNum (Rechtsgemeinschaft)
436      LEFT JOIN alkis_wertearten wr
437        ON cast(r.artderrechtsgemeinschaft AS character varying)=wr.k AND wr.element='ax_namensnummer' AND wr.bezeichnung='artderrechtsgemeinschaft'
438      WHERE NOT r.artderrechtsgemeinschaft IS NULL ) AS rg -- Rechtsgemeinschaft
439   ON rg.gml_id = gb.gml_id  -- zum GB
440  WHERE f.endet IS NULL AND s.endet IS NULL and gb.endet IS NULL and nn.endet IS NULL AND p.endet IS NULL
441    AND dien.endet IS NULL AND lm.endet IS NULL 
442---------
443  UNION
444---------
445 SELECT -- Fall 3: einfache Buchung (ohne Recht an)  //  Lagebezeichnung OHNE Hausnummer
446    so.gml_id                            AS stgml,       -- Filter: gml_id der Straße aus "ax_lagebezeichnungkatalogeintrag"
447    'o'                                  AS fall,        -- SÀtze unterschieden: OHNE HsNr
448  -- F l u r s t ÃŒ c k
449    f.gml_id                             AS fsgml,       -- möglicher Filter FlurstÃŒcks-GML-ID
450    f.flurstueckskennzeichen             AS fs_kennz,
451    f.gemarkungsnummer,                                  -- Teile des FS-Kennz. noch mal einzeln
452    f.flurnummer, f.zaehler, f.nenner,
453    f.amtlicheflaeche                    AS fs_flae,
454    g.bezeichnung                        AS gemarkung,
455  -- G r u n d b u c h
456  --gb.gml_id                            AS gbgml,       -- möglicher Filter Grundbuch-GML-ID
457    gb.bezirk                            AS gb_bezirk,
458    gb.buchungsblattnummermitbuchstabenerweiterung AS gb_blatt,
459    z.bezeichnung                        AS beznam,      -- GB-Bezirks-Name
460  -- B u c h u n g s s t e l l e  (GrundstÃŒck)
461    s.laufendenummer                     AS bu_lfd,      -- BVNR
462    '=' || s.zaehler || '/' || s.nenner  AS bu_ant,      -- als Excel-Formel (nur bei Wohnungsgrundbuch JOIN ÃŒber 'Recht an')
463    s.buchungsart,                                       -- verschlÃŒsselt
464    wb.v                                 AS bu_art,      -- Buchungsart entschlÃŒsselt
465  -- N a m e n s N u m m e r  (Normalfall mit Person)
466    nn.laufendenummernachdin1421         AS nam_lfd,
467    '=' || nn.zaehler|| '/' || nn.nenner AS nam_ant,     -- als Excel-Formel
468  -- R e c h t s g e m e i n s c h a f t  (Sonderfall von Namensnummer, ohne Person, ohne Nummer)
469    rg.artderrechtsgemeinschaft          AS nam_adr,
470    rg.v                                 AS nam_adrv,    -- Art der Rechtsgem. - Value zum Key
471    rg.beschriebderrechtsgemeinschaft    AS nam_bes,
472  -- P e r s o n
473  --p.gml_id                             AS psgml,       -- möglicher Filter Personen-GML-ID
474    p.anrede,                                            -- Anrede key
475    wp.v                                 AS anrv,        -- Anrede Value zum Key
476    p.vorname,
477    p.namensbestandteil,
478    p.nachnameoderfirma,                                 -- Familienname
479    p.geburtsdatum,
480  -- A d r e s s e  der Person
481    a.postleitzahlpostzustellung         AS plz,
482    a.ort_post                           AS ort,         -- Anschriftenzeile 1: PLZ+Ort
483    a.strasse,  a.hausnummer,                            -- Anschriftenzeile 2: Straße+HsNr
484    a.bestimmungsland                    AS land
485  FROM ax_flurstueck    f               -- FlurstÃŒck
486-- FlurstÃŒck >zeigtAuf> ax_lagebezeichnungOHNEhausnummer <JOIN> ax_lagebezeichnungkatalogeintrag
487  JOIN ax_lagebezeichnungohnehausnummer lo -- Lage OHNE
488    ON lo.gml_id = ANY (f.zeigtauf)
489  JOIN ax_lagebezeichnungkatalogeintrag so -- Straße OHNE
490    ON lo.land=so.land AND lo.regierungsbezirk=so.regierungsbezirk AND lo.kreis=so.kreis AND lo.gemeinde=so.gemeinde AND lo.lage=so.lage
491  JOIN ax_gemarkung g                   -- entschlÃŒsseln
492    ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer
493  JOIN ax_buchungsstelle s              -- FS >istGebucht> Buchungstelle
494    ON f.istgebucht = s.gml_id
495  JOIN ax_buchungsblatt  gb             -- Buchung >istBestandteilVon> Grundbuchblatt
496    ON gb.gml_id = s.istbestandteilvon
497  JOIN ax_buchungsblattbezirk z
498    ON gb.land=z.land AND gb.bezirk=z.bezirk
499  JOIN ax_namensnummer nn               -- Blatt <istBestandteilVon< NamNum
500    ON gb.gml_id = nn.istbestandteilvon
501  JOIN ax_person p                      -- NamNum >benennt> Person
502    ON p.gml_id = nn.benennt
503  LEFT JOIN ax_anschrift a              -- nur die "letzte" Anschrift zur Person verwenden
504    ON a.gml_id = (SELECT gml_id FROM ax_anschrift an WHERE an.gml_id = ANY(p.hat) AND an.endet IS NULL ORDER BY an.beginnt DESC LIMIT 1)
505  -- E n t s c h l ÃŒ s s e l n:
506  LEFT JOIN alkis_wertearten wp         -- EntschlÃŒsseln "Person - Anrede"
507    ON cast(p.anrede AS character varying) = wp.k
508   AND wp.element = 'ax_person'
509   AND wp.bezeichnung = 'anrede'
510  LEFT JOIN alkis_wertearten wb         -- EntschlÃŒsseln "Buchungsart"
511    ON cast(s.buchungsart AS character varying) = wb.k
512 -- buchungsart = integer / .k  = char 4stellig
513   AND wb.element = 'ax_buchungsstelle'
514   AND wb.bezeichnung = 'buchungsart'
515  -- 2mal "LEFT JOIN" verdoppelt die Zeile in der Ausgabe. Darum als Subquery in Spalten packen:
516  -- Noch mal "GB -> NamNum", aber dieses Mal fÃŒr "Rechtsgemeinschaft".
517  -- Kommt max. 1 mal je GB vor und hat keine Relation auf Person.
518  LEFT JOIN
519   ( SELECT gr.gml_id, r.artderrechtsgemeinschaft, r.beschriebderrechtsgemeinschaft, wr.v
520       FROM ax_namensnummer r
521       JOIN ax_buchungsblatt gr
522         ON r.istbestandteilvon = gr.gml_id -- Blatt <istBestandteilVon< NamNum (Rechtsgemeinschaft)
523      LEFT JOIN alkis_wertearten wr
524        ON cast(r.artderrechtsgemeinschaft AS character varying)=wr.k AND wr.element='ax_namensnummer' AND wr.bezeichnung='artderrechtsgemeinschaft'
525      WHERE NOT r.artderrechtsgemeinschaft IS NULL ) AS rg -- Rechtsgemeinschaft
526   ON rg.gml_id = gb.gml_id  -- zum GB
527  WHERE f.endet IS NULL AND s.endet IS NULL and gb.endet IS NULL and nn.endet IS NULL AND p.endet IS NULL AND lo.endet IS NULL
528---------
529  UNION
530---------
531 SELECT -- Fall 4: 2 Buchungs-Stellen (Recht An)  //  Lagebezeichnung OHNE Hausnummer
532    so.gml_id                            AS stgml,       -- Filter: gml_id der Straße aus "ax_lagebezeichnungkatalogeintrag"
533    'o'                                  AS fall,        -- SÀtze unterschieden: OHNE HsNr
534  -- F l u r s t ÃŒ c k
535    f.gml_id                             AS fsgml,       -- möglicher Filter FlurstÃŒcks-GML-ID
536    f.flurstueckskennzeichen             AS fs_kennz,
537    f.gemarkungsnummer,                                  -- Teile des FS-Kennz. noch mal einzeln
538    f.flurnummer, f.zaehler, f.nenner,
539    f.amtlicheflaeche                    AS fs_flae,
540    g.bezeichnung                        AS gemarkung,
541  -- G r u n d b u c h
542  --gb.gml_id                            AS gbgml,       -- möglicher Filter Grundbuch-GML-ID
543    gb.bezirk                            AS gb_bezirk,
544    gb.buchungsblattnummermitbuchstabenerweiterung AS gb_blatt,
545    z.bezeichnung                        AS beznam,      -- GB-Bezirks-Name
546  -- B u c h u n g s s t e l l e  (GrundstÃŒck)
547    s.laufendenummer                     AS bu_lfd,      -- BVNR
548    '=' || s.zaehler || '/' || s.nenner  AS bu_ant,      -- als Excel-Formel (nur bei Wohnungsgrundbuch JOIN ÃŒber 'Recht an')
549    s.buchungsart,                                       -- verschlÃŒsselt
550    wb.v                                 AS bu_art,      -- Buchungsart entschlÃŒsselt
551  -- N a m e n s N u m m e r  (Normalfall mit Person)
552    nn.laufendenummernachdin1421         AS nam_lfd,
553    '=' || nn.zaehler|| '/' || nn.nenner AS nam_ant,     -- als Excel-Formel
554  -- R e c h t s g e m e i n s c h a f t  (Sonderfall von Namensnummer, ohne Person, ohne Nummer)
555    rg.artderrechtsgemeinschaft          AS nam_adr,
556    rg.v                                 AS nam_adrv,    -- Art der Rechtsgem. - Value zum Key
557    rg.beschriebderrechtsgemeinschaft    AS nam_bes,
558  -- P e r s o n
559  --p.gml_id                             AS psgml,       -- möglicher Filter Personen-GML-ID
560    p.anrede,                                            -- Anrede key
561    wp.v                                 AS anrv,        -- Anrede Value zum Key
562    p.vorname,
563    p.namensbestandteil,
564    p.nachnameoderfirma,                                 -- Familienname
565    p.geburtsdatum,
566   -- A d r e s s e  der Person
567    a.postleitzahlpostzustellung         AS plz,
568    a.ort_post                           AS ort,         -- Anschriftenzeile 1: PLZ+Ort
569    a.strasse,  a.hausnummer,                            -- Anschriftenzeile 2: Straße+HsNr
570    a.bestimmungsland                    AS land
571  FROM ax_flurstueck f                  -- FlurstÃŒck
572-- FlurstÃŒck >zeigtAuf> ax_lagebezeichnungOHNEhausnummer <JOIN> ax_lagebezeichnungkatalogeintrag
573  JOIN ax_lagebezeichnungohnehausnummer lo -- Lage OHNE
574    ON lo.gml_id = ANY (f.zeigtauf)
575  JOIN ax_lagebezeichnungkatalogeintrag so -- Straße OHNE
576    ON lo.land=so.land AND lo.regierungsbezirk=so.regierungsbezirk AND lo.kreis=so.kreis AND lo.gemeinde=so.gemeinde AND lo.lage=so.lage
577  JOIN ax_gemarkung g                   -- entschlÃŒsseln
578    ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer
579  -- FS >istGebucht> Buchungstelle  <an<  Buchungstelle
580 -- Variante mit 2 Buchungs-Stellen (Recht An)
581  JOIN ax_buchungsstelle dien           -- dienende Buchung
582    ON f.istgebucht = dien.gml_id
583  JOIN ax_buchungsstelle s              -- herrschende Buchung
584    ON dien.gml_id = ANY (s.an)         -- hat Recht an
585  JOIN ax_buchungsblatt  gb             -- Buchung >istBestandteilVon> Grundbuchblatt
586    ON gb.gml_id = s.istbestandteilvon
587  JOIN ax_buchungsblattbezirk z
588    ON gb.land=z.land AND gb.bezirk=z.bezirk
589  JOIN ax_namensnummer nn               -- Blatt <istBestandteilVon< NamNum
590    ON gb.gml_id = nn.istbestandteilvon
591  JOIN ax_person p                      -- NamNum >benennt> Person
592    ON p.gml_id = nn.benennt
593  LEFT JOIN ax_anschrift a              -- nur die "letzte" Anschrift zur Person verwenden
594    ON a.gml_id = (SELECT gml_id FROM ax_anschrift an WHERE an.gml_id = ANY(p.hat) AND an.endet IS NULL ORDER BY an.beginnt DESC LIMIT 1)
595  -- E n t s c h l ÃŒ s s e l n:
596  LEFT JOIN alkis_wertearten wp         -- EntschlÃŒsseln "Person - Anrede"
597    ON cast(p.anrede AS character varying)=wp.k AND wp.element='ax_person' AND wp.bezeichnung='anrede'
598  LEFT JOIN alkis_wertearten wb         -- EntschlÃŒsseln "Buchungsart"
599    ON cast(s.buchungsart AS character varying) = wb.k
600   AND wb.element = 'ax_buchungsstelle'
601   AND wb.bezeichnung = 'buchungsart'
602  LEFT JOIN
603   ( SELECT gr.gml_id, r.artderrechtsgemeinschaft, r.beschriebderrechtsgemeinschaft, wr.v
604       FROM ax_namensnummer r
605       JOIN ax_buchungsblatt gr
606         ON r.istbestandteilvon = gr.gml_id -- Blatt <istBestandteilVon< NamNum (Rechtsgemeinschaft)
607      LEFT JOIN alkis_wertearten wr
608        ON cast(r.artderrechtsgemeinschaft AS character varying)=wr.k AND wr.element='ax_namensnummer' AND wr.bezeichnung='artderrechtsgemeinschaft'
609      WHERE NOT r.artderrechtsgemeinschaft IS NULL ) AS rg -- Rechtsgemeinschaft
610   ON rg.gml_id = gb.gml_id  -- zum GB
611  WHERE f.endet IS NULL AND s.endet IS NULL and gb.endet IS NULL and nn.endet IS NULL AND p.endet IS NULL
612    AND dien.endet IS NULL AND lo.endet IS NULL
613
614ORDER BY fs_kennz,   -- f.flurstueckskennzeichen,
615         gb_bezirk,  -- gb.bezirk,
616         gb_blatt,   -- gb.buchungsblattnummermitbuchstabenerweiterung,
617         bu_lfd,     -- s.laufendenummer,
618         nam_lfd;    -- nn.laufendenummernachdin1421
619
620COMMENT ON VIEW exp_csv_str
621 IS 'View fÃŒr einen CSV-Export aus der Buchauskunft mit alkisexport.php. Liefert nur FlurstÃŒcke, die eine Lagebezeichnung MIT/OHNE Hausnummer haben. Dazu noch den Filter auf GML-ID der Straßentabelle setzen.';
622
623
624-- Berechtigung
625-- ============
626  GRANT SELECT ON TABLE public.exp_csv          TO mb27;
627  GRANT SELECT ON TABLE public.exp_csv_str      TO mb27;
628
629-- Ende --
Note: See TracBrowser for help on using the repository browser.