source: trunk/import/norgis_alkis_pp/postcreate.d/6_views_exp_csv.sql @ 412

Revision 412, 33.1 KB checked in by frank.jaeger, 5 years ago (diff)

Anpassung der ALKIS-Auskunft (PHP) an die Full-Schema-Version des ALKIS-Importers 3.0

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