source: trunk/import/norgis_alkis_pp/postcreate.de/x_classic2norgis.sql @ 376

Revision 376, 46.3 KB checked in by frank.jaeger, 7 years ago (diff)

Verbesserungen an der ALKIS-Buchauskunft (Geschwindigkeit, Fehlerkorrekturen, Mandantenfähigkeit) und an der Mapbender2-Navigation.

Line 
1
2-- ===================================================================================
3--  ALKIS-PostGIS   Mapbender-Navigation und Buchauskunft fÃŒr NorGIS-ALKIS-Importer
4-- ===================================================================================
5
6--Stand
7--  2016-02-23
8--  2016-11-24 Index auf ax.person.nachnameoderfirma fÃŒr WMS Flurstuecke_kommunal
9--  2016-12-01 exp_csv: Fehlerkorrektur bei EntschlÃŒsselung der Buchungsart
10--             Optimierte Version (ohne Doppelverbindung)
11
12-- ToDo: Auch den View "flst_an_strasse" möglist nicht in andere Views einbinden.
13--       DafÃŒr die gesamte Struktur als UNION-View.
14
15-- Aufgabe:
16--
17-- Die ALKIS-Navigation fÃŒr Mapbender 2.7.4 arbeitet bisher mit der Datenbank-Struktur
18-- aus dem "Klassischen" Import mit Aufruf des Konvertres ogr2ogr aus einen Shellscript.
19--
20-- Dabei wird ein PostProcessing (Nach-Konverter-Verarbeitung) durchgefÃŒhrt,
21-- das Tabellen und Views bereit stellt, fÃŒr einen schnellen Zugriff in
22--  Mapfile, Auskunft und Navigation.
23--
24-- Dies Script soll eine Datenbank, die mit dem NorGIS-ALKIS-Importer geladen wurde
25-- fÃŒr die Verwendung mit ALKIS-Navigation und Buchauskunft vorbereiten.
26-- Es ist jedoch eine speziell angepasste Version der NAV-PHP-Scripte notwendig.
27
28-- Alternative:
29--  Die bisher auch in der NAV verwendeten Tabellen "pp_flur", "pp_gemarkung", "pp_gemeinde"
30--  werden auch fÃŒr eine "Übersichtskarte" benötigt (Gruppe "Gebiete" im Classic-Mapfile).
31--  Um diese zu bekommen mÃŒsste dieser Teil des klassischen Post-Processing auch in der
32--  NorGIS-Version ausgefÃŒhrt wÃŒrde.
33--  Siehe Script: "pp_gebiete.sql" (FÃŒllen) und Teile von "pp_definition.sql" (DB-Struktur).
34
35
36-- T e s t  /  A n a l y s e
37-- ============================
38/*
39
40-- ÄnderungswÃŒnsche an der norGIS-ALKIS-Importer Datenbankstruktur
41-- -----------------------------------------------------------------
42
431.
44In den ALKIS-Tabellen "ax_historischesflurstueck" und "ax_historischesflurstueckohneraumbezug" sollten
45die Spalten "zaehler" und "nenner" das Format Integer statt Character haben.
46Beim Anzeigen wird eine "numerische" Sortierung erwartet (aufsteigende FS-Nummer).
47Da die Spalten linksbÃŒndig ohne fÃŒhrende Nullen gefÃŒllt sind muss man bei jeder Abfrage eine
48Typenumwandlung "cast(.. AS integer)" durchfÃŒhren um eine numerische Sortierung zu bekommen.
49
502.
51In den PostProcessing-Tabellen "gem_shl" und "gema_shl" sollten die Spalten als "character varying"
52definiert sein und NICHT mit Leerzeichen aufgefÃŒllt werden.
53Derzeit muss man bei der Suche und Anzeige immer mit Subsring- und Trim-Funktionen arbeiten.
54
553.
56Die Gemarkungsnummer sollte einheitlich ohne vorangestelltes "Land" verwendet werden.
57In den ALKIS-Tabellen ist i.d.R. die Gemarkungsnummer 4stellig enthalten und land (2) in einem weiteren Feld.
58(ax_gemarkungsteilflur.gemarkung integer, ax_gemarkung.gemarkungsnummer character varying,
59 ax_flurstueck.gemarkungsnummer character varying, usw. ..)
60In den Hilfstabellen wie "gema_shl.gemashl" wird Gemarkung aber 6stellig mit "land" davor gespeichert.
61Man muss in den Programmen dann mal das Land hinzufÃŒgen und mal abschneiden.
62*/
63
64
65-- D a t e n
66-- ============================
67
68-- Die "Beziehungen" werden immer noch mit geladen, sind aber inzwischen ÃŒberflÃŒssig,
69-- weil jetzt Relationen zwischen den Tabellen definiert sind.
70  TRUNCATE alkis_beziehungen;
71
72
73-- T a b e l l e n
74-- ============================
75
76-- "pp_gemeinde" ersetzen
77-- ------------------------
78-- "pp_gemeinde" ist eine optimierte Tabelle der Gemeinden aus dem Post-Processing der Classic-Variante.
79-- In der NAV eErsetzen durch:
80
81-- TABLE gem_shl (
82--  gemshl character(32) NOT NULL,  -- GemeindeschlÃŒssel z.B. '05766040' = Lage
83--                                     Achtung: hinten mit Leerzeichen aufgefÃŒllt!!
84--  gemname character(100),         -- Name
85
86
87-- "pp_gemarkung" ersetzen
88-- ----------------------------
89-- "pp_gemarkung" ist eine optimierte Tabelle der Gemarkungen aus dem Post-Processing der Classic-Variante.
90-- In der NAV eErsetzen durch:
91
92-- TABLE gema_shl (
93--  gemashl character(6) NOT NULL,  -- GemarkungsschlÃŒssel z.B. '052005' = Lage
94--  gemarkung character(50),        -- Name
95--  gemshl character(30),           -- GemeindeschlÃŒssel z.B. '05766040' = Lage  oder leer
96--                                     Achtung: hinten mit Leerzeichen aufgefÃŒllt!!
97--  ag_shl character(4),            -- ?? leer
98
99
100-- "pp_flur" ersetzen
101-- -------------------
102-- "pp_flur" ist eine optimierte Tabelle der Katasterfluren aus dem Post-Processing der Classic-Variante.
103-- In der NAV eErsetzen durch:
104
105-- TABLE ax_gemarkungsteilflur (
106--  gml_id character(16) NOT NULL, -- Identifikator, global eindeutig
107--  endet character(20),
108--  schluesselgesamt character varying, -- (DER) SCH[CharacterString] 'SchlÃŒssel (gesamt)'   LLGGGFFF  Land-Gemerkung-Flur
109--  bezeichnung character varying, -- BEZ[CharacterString] 'Bezeichnung'  FFF  FLurnummer mit fÃŒhrenden Nullen
110--  land character varying, -- LAN[CharacterString] Bundesland. LL '05'
111--  gemarkung integer, -- GMN[CharacterString] Gemarkung.  GGGG
112--  gemarkungsteilflur integer, -- FLR[CharacterString] Gemarkungsteil bzw. Flur.
113
114
115-- Tabelle "gemeinde_person" ersetzen
116-- -----------------------------------
117--
118
119
120-- I n d i c e s
121-- ============================
122
123-- Tabelle "ax_gemarkungsteilflur" sollte Such-Index erhalten auf "gemarkung".
124-- FÃŒr Auflistung aller Fluren zur Gemarkung in Script "alkisnav_fls", Function "EineGemarkung".
125
126
127-- Der WMS "Flurstuecke_Kommunal" (aus View "st_flurst[gkz]") wird langsam,
128--  wenn er in einer kreisweiten Datenbank ausgefÃŒhrt wird.
129-- Das Filter-Feld benötigt einen Index:
130DROP INDEX if exists ax_person_nname;
131CREATE INDEX ax_person_nname
132  ON ax_person USING btree (nachnameoderfirma COLLATE pg_catalog."default");
133
134
135-- V i e w s
136-- ============================
137
138
139-- Bausteine fÃŒr andere Views:
140-- ---------------------------
141
142-- Ein View, der die Verbindung von FlurstÌck zur Buchung fÌr zwei verschiedene FÀlle herstellt.
143-- Einmal die "normalen" (direkten) Buchungen.
144-- Zweitens ÃŒber die Rechte von Buchungsstellen an anderen Buchungsstellen.
145-- Dies kann als "MittelstÃŒck" in den anderen Views eingefÃŒgt werden.
146
147-- Einfach/Direkt:
148--   FlurstÃŒck   >istGebucht>                         (Buchungs-Stelle)
149--
150-- Mit "Recht an":
151--   FlurstÃŒck   >istGebucht>  Buchungs-Stelle  <an<  (Buchungs-Stelle)
152--                               (dienend)              (herrschend)
153
154-- Stand 2016-12-01:
155--      Dieser View "doppelverbindung", eingebettet in andere Views, hat sich bei der AusfÃŒhrungszeit
156--      als nicht optimal heraus gestellt.
157--      Der Àußere "View" sieht einfacher aus und ist besser zu verstehen.
158--      Wenn man den ganzen Àußeren View als UNION formuliert, dann ist das zwar viel mehr Code.
159--      Die AusfÃŒhrungszeit ist aber deutlich kÃŒrzer.
160
161--           DROP VIEW public.doppelverbindung;
162CREATE OR REPLACE VIEW public.doppelverbindung
163AS
164  -- FS >istGebucht> Buchungstelle
165  SELECT f1.gml_id              AS fsgml,    -- gml_id FlurstÃŒck
166         b1.gml_id              AS bsgml,    -- gml_id Buchungs
167         0                      AS ba_dien
168    FROM ax_flurstueck f1
169    JOIN ax_buchungsstelle b1   ON f1.istgebucht = b1.gml_id
170 UNION
171  -- FS >istGebucht> Buchungstelle  <an<  Buchungstelle
172  SELECT f2.gml_id              AS fsgml,    -- gml_id FlurstÃŒck
173         b2.gml_id              AS bsgml,    -- gml_id Buchung - (herrschendes GB)
174         dien.buchungsart       AS ba_dien   -- Ein Feld aus der Zwischen-Buchung zur Fall-Unterscheidung
175    FROM ax_flurstueck f2
176    JOIN ax_buchungsstelle dien ON f2.istgebucht = dien.gml_id
177    JOIN ax_buchungsstelle b2   ON dien.gml_id = ANY (b2.an)  -- auch "zu" ?
178   WHERE dien.endet IS NULL;   -- FÃŒr das zusÀtzliche Verbindungselement die Historie HIER ausschließen,
179                               -- FÃŒr andere Tabellen muss dies in dem View erfolgen, der dies verwendet.
180
181COMMENT ON VIEW public.doppelverbindung
182 IS 'ALKIS-Beziehung von FlurstÃŒck zu Buchung. UNION-Zusammenfassung des einfachen Falls mit direkter Buchung und des Falles mit Recht einer Buchungsstelle an einer anderen Buchungsstelle.
183Dies ist ausschließlich gedacht zur Verwendung in anderen Views um diese einfacher zu machen.';
184
185
186-- Ein View, der die Verbindung von FlurstÃŒck zur Straßentabelle fÃŒr zwei verschiedene FÀlle herstellt.
187-- Einmal ÃŒber die Lagebezeichnung MIT Hausnummer und einmal OHNE.
188-- Dies kann als "MittelstÃŒck" in den anderen Views eingefÃŒgt werden.
189
190--           DROP VIEW public.flst_an_strasse;
191CREATE OR REPLACE VIEW public.flst_an_strasse
192AS
193  -- FlurstÃŒck >weistAuf> ax_lagebezeichnungMIThausnummer <JOIN> ax_lagebezeichnungkatalogeintrag
194  SELECT fm.gml_id AS fsgml,
195         sm.gml_id AS stgml,                 -- Filter: gml_id der Straße
196         'm' AS fall                         -- SÀtze unterschieden: Mit HsNr
197    FROM ax_flurstueck fm                    -- FlurstÃŒck Mit
198    JOIN ax_lagebezeichnungmithausnummer lm  -- Lage MIT
199      ON lm.gml_id = ANY (fm.weistauf)
200    JOIN ax_lagebezeichnungkatalogeintrag sm
201      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
202   WHERE lm.endet IS NULL AND fm.endet IS NULL -- nichts Historisches
203 UNION
204  -- FlurstÃŒck >zeigtAuf> ax_lagebezeichnungOHNEhausnummer <JOIN> ax_lagebezeichnungkatalogeintrag
205  SELECT fo.gml_id AS fsgml,
206         so.gml_id AS stgml,                 -- Filter: gml_id der Straße
207         'o' AS fall                         -- SÀtze unterschieden: Ohne HsNr
208    FROM ax_flurstueck fo                    -- FlurstÃŒck OHNE
209    JOIN ax_lagebezeichnungohnehausnummer lo -- Lage OHNE
210      ON lo.gml_id = ANY (fo.zeigtauf)
211    JOIN ax_lagebezeichnungkatalogeintrag so -- Straße OHNE
212      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
213   WHERE lo.endet IS NULL AND fo.endet IS NULL; -- nichts Historisches
214
215COMMENT ON VIEW public.flst_an_strasse
216 IS 'ALKIS-Beziehung von FlurstÃŒck zu Straßentabelle. UNION-Zusammenfassung der FÀlle MIT und OHNE Hausnummer.';
217
218-- Muss man noch dafÃŒr sorgen, dass FlurstÃŒck nicht doppelt vorkommt? z.B. mit DISTINCT
219-- Oder mÃŒssen ggf. mehrfache FS im Programm ÃŒbersprungen werden?
220
221
222-- Generelle Export-Struktur "FlurstÃŒck - Buchung - Grundbuch - Person"
223-- --------------------------------------------------------------------
224-- Wird benötigt im Auskunft-Modul "alkisexport.php":
225-- Je nach aufrufendem Modul wird der Filter (WHERE) an anderer Stelle gesetzt (gml_id von FS, GB oder Pers.)
226-- FÃŒr Filter nach "Straße" siehe die nachfolgende Sonderversion "exp_csv_str".
227
228-- Problem / Konflikt:
229-- Es kann nur eine lineare Struktur aus Spalten und Zeilen exportiert werden.
230-- Wenn nicht nur die Daten des Ausgangs-Objektes exportiert werden, sondern auch verbundene Tabellen in
231-- einer 1:N-Struktur, dann verdoppeln sich Zeileninhalte und es werden redundante Daten erzeugt.
232-- Diese Redundanzen mÃŒssen vom dem Programm gefiltert werden, das die Daten ÃŒber eine Schnittstelle einliest.
233-- Anwendungs-Beispiel: Abrechnung von AnliegerbeitrÀgen.
234
235/*
236DROP VIEW IF EXISTS exp_csv_alt;
237CREATE OR REPLACE VIEW exp_csv_alt
238AS
239 SELECT
240  -- F l u r s t ÃŒ c k
241    f.gml_id                             AS fsgml,       -- möglicher Filter FlurstÃŒcks-GML-ID
242    f.flurstueckskennzeichen             AS fs_kennz,
243    f.gemarkungsnummer,                                  -- Teile des FS-Kennz. noch mal einzeln
244    f.flurnummer, f.zaehler, f.nenner,
245    f.amtlicheflaeche                    AS fs_flae,
246    g.bezeichnung                        AS gemarkung,
247  -- G r u n d b u c h
248    gb.gml_id                            AS gbgml,       -- möglicher Filter Grundbuch-GML-ID
249    gb.bezirk                            AS gb_bezirk,
250    gb.buchungsblattnummermitbuchstabenerweiterung AS gb_blatt,
251    z.bezeichnung                        AS beznam,      -- GB-Bezirks-Name
252  -- B u c h u n g s s t e l l e  (GrundstÃŒck)
253    s.laufendenummer                     AS bu_lfd,      -- BVNR
254  --s.zaehler, s.nenner,                                 -- Anteil des GB am FS, einzelne Felder
255    '=' || s.zaehler || '/' || s.nenner  AS bu_ant,      -- als Excel-Formel (nur bei Wohnungsgrundbuch JOIN ÃŒber 'Recht an')
256    s.buchungsart,                                       -- verschlÃŒsselt
257  --b.bezeichner                         AS bu_art,      -- Buchungsart entschlÃŒsselt
258    wb.v                                 AS bu_art,      -- Buchungsart entschlÃŒsselt
259  -- N a m e n s N u m m e r  (Normalfall mit Person)
260    nn.laufendenummernachdin1421         AS nam_lfd,
261    '=' || nn.zaehler|| '/' || nn.nenner AS nam_ant,         -- als Excel-Formel
262  -- 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)
263  -- Aus Subquery rg
264    rg.artderrechtsgemeinschaft          AS nam_adr,
265    rg.v                                 AS nam_adrv,        -- Art der Rechtsgem. - Value zum Key
266    rg.beschriebderrechtsgemeinschaft    AS nam_bes,
267  -- P e r s o n
268    p.gml_id                             AS psgml,           -- möglicher Filter Personen-GML-ID
269    p.anrede,                                                -- Anrede key
270    wp.v                                 AS anrv,            -- Anrede Value zum Key
271    p.vorname,
272    p.namensbestandteil,
273    p.nachnameoderfirma,                                     -- Familienname
274    p.geburtsdatum,
275    --p.geburtsname, p.akademischergrad
276   -- A d r e s s e  der Person
277    a.postleitzahlpostzustellung         AS plz,
278    a.ort_post                           AS ort,             -- Anschreifenzeile 1: PLZ+Ort
279    a.strasse,  a.hausnummer,                                -- Anschriftenzeile 2: Straße+HsNr
280    a.bestimmungsland                    AS land
281  FROM ax_flurstueck    f               -- FlurstÃŒck
282  JOIN doppelverbindung d               -- beide FÀlle ÃŒber Union-View: direkt und ÃŒber Recht von Buchung an Buchung
283    ON d.fsgml = f.gml_id
284  JOIN ax_gemarkung g                   -- entschlÃŒsseln
285    ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer
286  JOIN ax_buchungsstelle s              -- Buchungs-Stelle
287    ON d.bsgml = s.gml_id
288  JOIN ax_buchungsblatt  gb             -- Buchung >istBestandteilVon> Grundbuchblatt
289    ON gb.gml_id = s.istbestandteilvon
290  JOIN ax_buchungsblattbezirk z
291    ON gb.land=z.land AND gb.bezirk=z.bezirk
292  JOIN ax_namensnummer nn               -- Blatt <istBestandteilVon< NamNum
293    ON gb.gml_id = nn.istbestandteilvon
294  JOIN ax_person p                      -- NamNum >benennt> Person
295    ON p.gml_id = nn.benennt
296  LEFT JOIN ax_anschrift a
297    ON a.gml_id = ANY (p.hat)
298  -- E n t s c h l ÃŒ s s e l n:
299  LEFT JOIN alkis_wertearten wp         -- EntschlÃŒsseln "Person - Anrede"
300    ON cast(p.anrede AS character varying)=wp.k AND wp.element='ax_person' AND wp.bezeichnung='anrede'
301  LEFT JOIN alkis_wertearten wb         -- EntschlÃŒsseln "Buchungsart"
302    ON cast(s.buchungsart AS character varying) = wb.k
303   AND wb.element = 'ax_buchungsstelle'
304   AND wb.bezeichnung = 'buchungsart'
305  -- 2mal "LEFT JOIN" verdoppelt die Zeile in der Ausgabe. Darum als Subquery in Spalten packen:
306  -- Noch mal "GB -> NamNum", aber dieses Mal fÃŒr "Rechtsgemeinschaft".
307  -- Kommt max. 1 mal je GB vor und hat keine Relation auf Person.
308  LEFT JOIN
309   ( SELECT gr.gml_id, r.artderrechtsgemeinschaft, r.beschriebderrechtsgemeinschaft, wr.v
310       FROM ax_namensnummer r
311       JOIN ax_buchungsblatt gr
312         ON r.istbestandteilvon = gr.gml_id -- Blatt <istBestandteilVon< NamNum (Rechtsgemeinschaft)
313      LEFT JOIN alkis_wertearten wr
314        ON cast(r.artderrechtsgemeinschaft AS character varying)=wr.k AND wr.element='ax_namensnummer' AND wr.bezeichnung='artderrechtsgemeinschaft'
315      WHERE NOT r.artderrechtsgemeinschaft IS NULL ) AS rg -- Rechtsgemeinschaft
316   ON rg.gml_id = gb.gml_id  -- zum GB
317  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
318  ORDER BY f.flurstueckskennzeichen,
319           gb.bezirk, gb.buchungsblattnummermitbuchstabenerweiterung, s.laufendenummer,
320           nn.laufendenummernachdin1421;
321
322COMMENT ON VIEW exp_csv_alt
323 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.
324ALTE VERSION unter Verwendung von "doppelverbindung". Zu langsam!!';
325*/
326
327-- OPTIMIERUNG 2016-11-30:
328-- Eine Variante, die ohne "doppelverbindung" auskommt. Das ist optimaler (schneller, Faktor 50!).
329-- Das in "doppelverbindung" enthaltene UNION auf die gesamte Struktur anwenden.
330-- Verbindungs-Tabellen zwischen "doppelverbindung" und den benachbarten Tabellen sind nur einmal enthalten.
331DROP VIEW IF EXISTS exp_csv;
332
333CREATE OR REPLACE VIEW exp_csv
334AS
335 SELECT
336  -- F l u r s t ÃŒ c k
337    f.gml_id                             AS fsgml,       -- möglicher Filter FlurstÃŒcks-GML-ID
338    f.flurstueckskennzeichen             AS fs_kennz,
339    f.gemarkungsnummer,                                  -- Teile des FS-Kennz. noch mal einzeln
340    f.flurnummer, f.zaehler, f.nenner,
341    f.amtlicheflaeche                    AS fs_flae,
342    g.bezeichnung                        AS gemarkung,
343  -- G r u n d b u c h
344    gb.gml_id                            AS gbgml,       -- möglicher Filter Grundbuch-GML-ID
345    gb.bezirk                            AS gb_bezirk,
346    gb.buchungsblattnummermitbuchstabenerweiterung AS gb_blatt,
347    z.bezeichnung                        AS beznam,      -- GB-Bezirks-Name
348  -- B u c h u n g s s t e l l e  (GrundstÃŒck)
349    s.laufendenummer                     AS bu_lfd,      -- BVNR
350    '=' || s.zaehler || '/' || s.nenner  AS bu_ant,      -- als Excel-Formel (nur bei Wohnungsgrundbuch JOIN ÃŒber 'Recht an')
351    s.buchungsart,                                       -- verschlÃŒsselt
352    wb.v                                 AS bu_art,      -- Buchungsart entschlÃŒsselt
353  -- N a m e n s N u m m e r  (Normalfall mit Person)
354    nn.laufendenummernachdin1421         AS nam_lfd,
355    '=' || nn.zaehler|| '/' || nn.nenner AS nam_ant,     -- als Excel-Formel
356  -- 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)
357    rg.artderrechtsgemeinschaft          AS nam_adr,
358    rg.v                                 AS nam_adrv,    -- Art der Rechtsgem. - Value zum Key
359    rg.beschriebderrechtsgemeinschaft    AS nam_bes,
360  -- P e r s o n
361    p.gml_id                             AS psgml,       -- möglicher Filter Personen-GML-ID
362    p.anrede,                                            -- Anrede key
363    wp.v                                 AS anrv,        -- Anrede Value zum Key
364    p.vorname,
365    p.namensbestandteil,
366    p.nachnameoderfirma,                                 -- Familienname
367    p.geburtsdatum,
368  -- A d r e s s e  der Person
369    a.postleitzahlpostzustellung         AS plz,
370    a.ort_post                           AS ort,         -- Anschreifenzeile 1: PLZ+Ort
371    a.strasse,  a.hausnummer,                            -- Anschriftenzeile 2: Straße+HsNr
372    a.bestimmungsland                    AS land
373  FROM ax_flurstueck    f               -- FlurstÃŒck
374  JOIN ax_gemarkung g                   -- entschlÃŒsseln
375    ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer
376  JOIN ax_buchungsstelle s              -- FS >istGebucht> Buchungstelle
377    ON f.istgebucht = s.gml_id
378  JOIN ax_buchungsblatt  gb             -- Buchung >istBestandteilVon> Grundbuchblatt
379    ON gb.gml_id = s.istbestandteilvon
380  JOIN ax_buchungsblattbezirk z
381    ON gb.land=z.land AND gb.bezirk=z.bezirk
382  JOIN ax_namensnummer nn               -- Blatt <istBestandteilVon< NamNum
383    ON gb.gml_id = nn.istbestandteilvon
384  JOIN ax_person p                      -- NamNum >benennt> Person
385    ON p.gml_id = nn.benennt
386  LEFT JOIN ax_anschrift a
387    ON a.gml_id = ANY (p.hat)
388  -- E n t s c h l ÃŒ s s e l n:
389  LEFT JOIN alkis_wertearten wp         -- EntschlÃŒsseln "Person - Anrede"
390    ON cast(p.anrede AS character varying) = wp.k
391   AND wp.element = 'ax_person'
392   AND wp.bezeichnung = 'anrede'
393  LEFT JOIN alkis_wertearten wb         -- EntschlÃŒsseln "Buchungsart"
394    ON cast(s.buchungsart AS character varying) = wb.k
395 -- buchungsart = integer / .k  = char 4stellig
396   AND wb.element = 'ax_buchungsstelle'
397   AND wb.bezeichnung = 'buchungsart'
398  -- 2mal "LEFT JOIN" verdoppelt die Zeile in der Ausgabe. Darum als Subquery in Spalten packen:
399  -- Noch mal "GB -> NamNum", aber dieses Mal fÃŒr "Rechtsgemeinschaft".
400  -- Kommt max. 1 mal je GB vor und hat keine Relation auf Person.
401  LEFT JOIN
402   ( SELECT gr.gml_id, r.artderrechtsgemeinschaft, r.beschriebderrechtsgemeinschaft, wr.v
403       FROM ax_namensnummer r
404       JOIN ax_buchungsblatt gr
405         ON r.istbestandteilvon = gr.gml_id -- Blatt <istBestandteilVon< NamNum (Rechtsgemeinschaft)
406      LEFT JOIN alkis_wertearten wr
407        ON cast(r.artderrechtsgemeinschaft AS character varying)=wr.k AND wr.element='ax_namensnummer' AND wr.bezeichnung='artderrechtsgemeinschaft'
408      WHERE NOT r.artderrechtsgemeinschaft IS NULL ) AS rg -- Rechtsgemeinschaft
409   ON rg.gml_id = gb.gml_id  -- zum GB
410  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
411UNION
412 SELECT
413  -- F l u r s t ÃŒ c k
414    f.gml_id                             AS fsgml,       -- möglicher Filter FlurstÃŒcks-GML-ID
415    f.flurstueckskennzeichen             AS fs_kennz,
416    f.gemarkungsnummer,                                  -- Teile des FS-Kennz. noch mal einzeln
417    f.flurnummer, f.zaehler, f.nenner,
418    f.amtlicheflaeche                    AS fs_flae,
419    g.bezeichnung                        AS gemarkung,
420  -- G r u n d b u c h
421    gb.gml_id                            AS gbgml,       -- möglicher Filter Grundbuch-GML-ID
422    gb.bezirk                            AS gb_bezirk,
423    gb.buchungsblattnummermitbuchstabenerweiterung AS gb_blatt,
424    z.bezeichnung                        AS beznam,      -- GB-Bezirks-Name
425  -- B u c h u n g s s t e l l e  (GrundstÃŒck)
426    s.laufendenummer                     AS bu_lfd,      -- BVNR
427    '=' || s.zaehler || '/' || s.nenner  AS bu_ant,      -- als Excel-Formel (nur bei Wohnungsgrundbuch JOIN ÃŒber 'Recht an')
428    s.buchungsart,                                       -- verschlÃŒsselt
429    wb.v                                 AS bu_art,      -- Buchungsart entschlÃŒsselt
430  -- N a m e n s N u m m e r  (Normalfall mit Person)
431    nn.laufendenummernachdin1421         AS nam_lfd,
432    '=' || nn.zaehler|| '/' || nn.nenner AS nam_ant,     -- als Excel-Formel
433  -- 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)
434    rg.artderrechtsgemeinschaft          AS nam_adr,
435    rg.v                                 AS nam_adrv,    -- Art der Rechtsgem. - Value zum Key
436    rg.beschriebderrechtsgemeinschaft    AS nam_bes,
437  -- P e r s o n
438    p.gml_id                             AS psgml,       -- möglicher Filter Personen-GML-ID
439    p.anrede,                                            -- Anrede key
440    wp.v                                 AS anrv,        -- Anrede Value zum Key
441    p.vorname,
442    p.namensbestandteil,
443    p.nachnameoderfirma,                                 -- Familienname
444    p.geburtsdatum,
445   -- A d r e s s e  der Person
446    a.postleitzahlpostzustellung         AS plz,
447    a.ort_post                           AS ort,         -- Anschreifenzeile 1: PLZ+Ort
448    a.strasse,  a.hausnummer,                            -- Anschriftenzeile 2: Straße+HsNr
449    a.bestimmungsland                    AS land
450  FROM ax_flurstueck f                  -- FlurstÃŒck
451  JOIN ax_gemarkung g                   -- entschlÃŒsseln
452    ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer
453  -- FS >istGebucht> Buchungstelle  <an<  Buchungstelle
454 -- Variante mit 2 Buchungs-Stellen (Recht An)
455  JOIN ax_buchungsstelle dien           -- dienende Buchung
456    ON f.istgebucht = dien.gml_id
457  JOIN ax_buchungsstelle s              -- herrschende Buchung
458    ON dien.gml_id = ANY (s.an)         -- hat Recht an
459  JOIN ax_buchungsblatt  gb             -- Buchung >istBestandteilVon> Grundbuchblatt
460    ON gb.gml_id = s.istbestandteilvon
461  JOIN ax_buchungsblattbezirk z
462    ON gb.land=z.land AND gb.bezirk=z.bezirk
463  JOIN ax_namensnummer nn               -- Blatt <istBestandteilVon< NamNum
464    ON gb.gml_id = nn.istbestandteilvon
465  JOIN ax_person p                      -- NamNum >benennt> Person
466    ON p.gml_id = nn.benennt
467  LEFT JOIN ax_anschrift a
468    ON a.gml_id = ANY (p.hat)
469  -- E n t s c h l ÃŒ s s e l n:
470  LEFT JOIN alkis_wertearten wp         -- EntschlÃŒsseln "Person - Anrede"
471    ON cast(p.anrede AS character varying)=wp.k AND wp.element='ax_person' AND wp.bezeichnung='anrede'
472  LEFT JOIN alkis_wertearten wb         -- EntschlÃŒsseln "Buchungsart"
473    ON cast(s.buchungsart AS character varying) = wb.k
474   AND wb.element = 'ax_buchungsstelle'
475   AND wb.bezeichnung = 'buchungsart'
476  LEFT JOIN
477   ( SELECT gr.gml_id, r.artderrechtsgemeinschaft, r.beschriebderrechtsgemeinschaft, wr.v
478       FROM ax_namensnummer r
479       JOIN ax_buchungsblatt gr
480         ON r.istbestandteilvon = gr.gml_id -- Blatt <istBestandteilVon< NamNum (Rechtsgemeinschaft)
481      LEFT JOIN alkis_wertearten wr
482        ON cast(r.artderrechtsgemeinschaft AS character varying)=wr.k AND wr.element='ax_namensnummer' AND wr.bezeichnung='artderrechtsgemeinschaft'
483      WHERE NOT r.artderrechtsgemeinschaft IS NULL ) AS rg -- Rechtsgemeinschaft
484   ON rg.gml_id = gb.gml_id  -- zum GB
485  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
486    AND dien.endet IS NULL
487
488ORDER BY fsgml,      -- f.flurstueckskennzeichen,
489         gb_bezirk,  -- gb.bezirk,
490         gb_blatt,   -- gb.buchungsblattnummermitbuchstabenerweiterung,
491         bu_lfd,     -- s.laufendenummer,
492         nam_lfd;    -- nn.laufendenummernachdin1421
493
494COMMENT ON VIEW exp_csv
495 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.';
496
497
498-- Eine Variante des View "exp_csv":
499-- Hier wird zusÀtzlich der Baustein "flst_an_strasse" verwendet.
500-- Der Filter "WHERE stgml= " auf die "gml_id" von "ax_lagebezeichnungkatalogeintrag" sollte gesetzt werden
501-- um alle FlurstÃŒcke zu bekommen, die an einer Straße liegen.
502
503/*
504DROP VIEW IF EXISTS exp_csv_str_alt;
505CREATE OR REPLACE VIEW exp_csv_str_alt
506AS
507 SELECT
508    l.stgml,                                             -- Filter: gml_id aus "ax_lagebezeichnungkatalogeintrag"
509                                                         -- UNTERSCHIED zu exp_csv)
510  -- F l u r s t ÃŒ c k
511    f.gml_id                             AS fsgml,       -- Gruppenwechsel fÃŒr "function lage_zum_fs" in alkisexport.php
512    f.flurstueckskennzeichen             AS fs_kennz,
513    f.gemarkungsnummer,                                  -- Teile des FS-Kennz. noch mal einzeln
514    f.flurnummer, f.zaehler, f.nenner,
515    f.amtlicheflaeche                    AS fs_flae,
516    g.bezeichnung                        AS gemarkung,
517  -- G r u n d b u c h
518  --gb.gml_id                            AS gbgml,       -- möglicher Filter Grundbuch-GML-ID
519    gb.bezirk                            AS gb_bezirk,
520    gb.buchungsblattnummermitbuchstabenerweiterung AS gb_blatt,
521    z.bezeichnung                        AS beznam,      -- GB-Bezirks-Name
522  -- B u c h u n g s s t e l l e  (GrundstÃŒck)
523    s.laufendenummer                     AS bu_lfd,      -- BVNR
524  --s.zaehler, s.nenner,                                 -- Anteil des GB am FS, einzelne Felder
525    '=' || s.zaehler || '/' || s.nenner  AS bu_ant,      -- als Excel-Formel (nur bei Wohnungsgrundbuch JOIN ÃŒber 'Recht an')
526    s.buchungsart,                                       -- verschlÃŒsselt
527    wb.v                                 AS bu_art,      -- Buchungsart entschlÃŒsselt
528  -- N a m e n s N u m m e r (Normalfall mit Person)
529    nn.laufendenummernachdin1421         AS nam_lfd,
530    '=' || nn.zaehler|| '/' || nn.nenner AS nam_ant,         -- als Excel-Formel
531  -- 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)
532  -- Aus Subquery rg
533    rg.artderrechtsgemeinschaft          AS nam_adr,
534    rg.v                                 AS nam_adrv,        -- Art der Rechtsgem. - Value zum Key
535    rg.beschriebderrechtsgemeinschaft    AS nam_bes,
536  -- P e r s o n
537  --p.gml_id                             AS psgml,           -- möglicher Filter Personen-GML-ID
538    p.anrede,                                                -- Anrede key
539    wp.v                                 AS anrv,            -- Anrede Value zum Key
540    p.vorname,
541    p.namensbestandteil,
542    p.nachnameoderfirma,                                     -- Familienname
543    p.geburtsdatum,
544    --p.geburtsname, p.akademischergrad
545   -- A d r e s s e  der Person
546    a.postleitzahlpostzustellung         AS plz,
547    a.ort_post                           AS ort,             -- Anschriftenzeile 1: PLZ+Ort
548    a.strasse,  a.hausnummer,                                -- Anschriftenzeile 2: Straße+HsNr
549    a.bestimmungsland                    AS land
550  FROM ax_flurstueck    f               -- FlurstÃŒck
551  JOIN flst_an_strasse  l               -- Lage (hier zusÀtzlicher JOIN gegenÃŒber Version "exp_csv")
552        ON l.fsgml = f.gml_id
553  JOIN doppelverbindung d               -- beide FÀlle ÃŒber Union-View: direkt und ÃŒber Recht von Buchung an Buchung
554    ON d.fsgml = f.gml_id
555  JOIN ax_gemarkung g                   -- entschlÃŒsseln
556    ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer
557  JOIN ax_buchungsstelle s              -- Buchungs-Stelle
558    ON d.bsgml = s.gml_id
559  JOIN ax_buchungsblatt  gb             -- Buchung >istBestandteilVon> Grundbuchblatt
560    ON gb.gml_id = s.istbestandteilvon
561  JOIN ax_buchungsblattbezirk z
562    ON gb.land=z.land AND gb.bezirk=z.bezirk
563  JOIN ax_namensnummer nn               -- Blatt <istBestandteilVon< NamNum
564    ON gb.gml_id = nn.istbestandteilvon
565  JOIN ax_person p                      -- NamNum >benennt> Person
566    ON p.gml_id = nn.benennt
567  LEFT JOIN ax_anschrift a
568    ON a.gml_id = ANY (p.hat)
569  -- E n t s c h l ÃŒ s s e l n:
570  LEFT JOIN alkis_wertearten wp         -- EntschlÃŒsseln "Person - Anrede"
571    ON cast(p.anrede AS character varying)=wp.k AND wp.element='ax_person' AND wp.bezeichnung='anrede'
572  LEFT JOIN alkis_wertearten wb         -- EntschlÃŒsseln "Buchungsart"
573    ON cast(s.buchungsart AS character varying)=wb.k AND wp.element='ax_buchungsstelle' AND wp.bezeichnung='buchungsart'
574  -- 2mal "LEFT JOIN" verdoppelt die Zeile in der Ausgabe. Darum als Subquery in Spalten packen:
575  -- Noch mal "GB -> NamNum", aber dieses Mal fÃŒr "Rechtsgemeinschaft".
576  -- Kommt max. 1 mal je GB vor und hat keine Relation auf Person.
577  LEFT JOIN
578   ( SELECT gr.gml_id, r.artderrechtsgemeinschaft, r.beschriebderrechtsgemeinschaft, wr.v
579       FROM ax_namensnummer r
580       JOIN ax_buchungsblatt gr
581         ON r.istbestandteilvon = gr.gml_id -- Blatt <istBestandteilVon< NamNum (Rechtsgemeinschaft)
582      LEFT JOIN alkis_wertearten wr
583        ON cast(r.artderrechtsgemeinschaft AS character varying)=wr.k AND wr.element='ax_namensnummer' AND wr.bezeichnung='artderrechtsgemeinschaft'
584      WHERE NOT r.artderrechtsgemeinschaft IS NULL ) AS rg  -- Rechtsgemeinschaft
585   ON rg.gml_id = gb.gml_id  -- zum GB
586  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
587  ORDER BY f.flurstueckskennzeichen,
588           gb.bezirk, gb.buchungsblattnummermitbuchstabenerweiterung, s.laufendenummer,
589           nn.laufendenummernachdin1421;
590
591COMMENT ON VIEW exp_csv_str_alt
592 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.';
593*/
594
595-- 2016-12-01: Neue schnellere Version unter Vermeidung von "doppelverbindung":
596--              Etwa um den Faktor 2,5 schneller als die alte Version
597
598-- ToDo: Den View "flst_an_strasse" möglichst auch nicht im Views verwenden.
599--       Ist 4-fach-Union schneller ??
600
601DROP VIEW IF EXISTS exp_csv_str;
602
603CREATE OR REPLACE VIEW exp_csv_str
604AS
605 SELECT
606    l.stgml,                                             -- Filter: gml_id aus "ax_lagebezeichnungkatalogeintrag"
607                                                         -- UNTERSCHIED zu exp_csv
608  -- F l u r s t ÃŒ c k
609    f.gml_id                             AS fsgml,       -- möglicher Filter FlurstÃŒcks-GML-ID
610    f.flurstueckskennzeichen             AS fs_kennz,
611    f.gemarkungsnummer,                                  -- Teile des FS-Kennz. noch mal einzeln
612    f.flurnummer, f.zaehler, f.nenner,
613    f.amtlicheflaeche                    AS fs_flae,
614    g.bezeichnung                        AS gemarkung,
615  -- G r u n d b u c h
616  --gb.gml_id                            AS gbgml,       -- möglicher Filter Grundbuch-GML-ID
617    gb.bezirk                            AS gb_bezirk,
618    gb.buchungsblattnummermitbuchstabenerweiterung AS gb_blatt,
619    z.bezeichnung                        AS beznam,      -- GB-Bezirks-Name
620  -- B u c h u n g s s t e l l e  (GrundstÃŒck)
621    s.laufendenummer                     AS bu_lfd,      -- BVNR
622    '=' || s.zaehler || '/' || s.nenner  AS bu_ant,      -- als Excel-Formel (nur bei Wohnungsgrundbuch JOIN ÃŒber 'Recht an')
623    s.buchungsart,                                       -- verschlÃŒsselt
624    wb.v                                 AS bu_art,      -- Buchungsart entschlÃŒsselt
625  -- N a m e n s N u m m e r  (Normalfall mit Person)
626    nn.laufendenummernachdin1421         AS nam_lfd,
627    '=' || nn.zaehler|| '/' || nn.nenner AS nam_ant,     -- als Excel-Formel
628  -- 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)
629    rg.artderrechtsgemeinschaft          AS nam_adr,
630    rg.v                                 AS nam_adrv,    -- Art der Rechtsgem. - Value zum Key
631    rg.beschriebderrechtsgemeinschaft    AS nam_bes,
632  -- P e r s o n
633  --p.gml_id                             AS psgml,       -- möglicher Filter Personen-GML-ID
634    p.anrede,                                            -- Anrede key
635    wp.v                                 AS anrv,        -- Anrede Value zum Key
636    p.vorname,
637    p.namensbestandteil,
638    p.nachnameoderfirma,                                 -- Familienname
639    p.geburtsdatum,
640  -- A d r e s s e  der Person
641    a.postleitzahlpostzustellung         AS plz,
642    a.ort_post                           AS ort,         -- Anschreifenzeile 1: PLZ+Ort
643    a.strasse,  a.hausnummer,                            -- Anschriftenzeile 2: Straße+HsNr
644    a.bestimmungsland                    AS land
645  FROM ax_flurstueck    f               -- FlurstÃŒck
646  JOIN flst_an_strasse  l               -- Lage (hier zusÀtzlicher JOIN gegenÃŒber Version "exp_csv")
647    ON l.fsgml = f.gml_id               -- ToDo: ++ Durch UNION ersetzen! Oder durch Subquery? ++
648  JOIN ax_gemarkung g                   -- entschlÃŒsseln
649    ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer
650  JOIN ax_buchungsstelle s              -- FS >istGebucht> Buchungstelle
651    ON f.istgebucht = s.gml_id
652  JOIN ax_buchungsblatt  gb             -- Buchung >istBestandteilVon> Grundbuchblatt
653    ON gb.gml_id = s.istbestandteilvon
654  JOIN ax_buchungsblattbezirk z
655    ON gb.land=z.land AND gb.bezirk=z.bezirk
656  JOIN ax_namensnummer nn               -- Blatt <istBestandteilVon< NamNum
657    ON gb.gml_id = nn.istbestandteilvon
658  JOIN ax_person p                      -- NamNum >benennt> Person
659    ON p.gml_id = nn.benennt
660  LEFT JOIN ax_anschrift a
661    ON a.gml_id = ANY (p.hat)
662  -- E n t s c h l ÃŒ s s e l n:
663  LEFT JOIN alkis_wertearten wp         -- EntschlÃŒsseln "Person - Anrede"
664    ON cast(p.anrede AS character varying) = wp.k
665   AND wp.element = 'ax_person'
666   AND wp.bezeichnung = 'anrede'
667  LEFT JOIN alkis_wertearten wb         -- EntschlÃŒsseln "Buchungsart"
668    ON cast(s.buchungsart AS character varying) = wb.k
669 -- buchungsart = integer / .k  = char 4stellig
670   AND wb.element = 'ax_buchungsstelle'
671   AND wb.bezeichnung = 'buchungsart'
672  -- 2mal "LEFT JOIN" verdoppelt die Zeile in der Ausgabe. Darum als Subquery in Spalten packen:
673  -- Noch mal "GB -> NamNum", aber dieses Mal fÃŒr "Rechtsgemeinschaft".
674  -- Kommt max. 1 mal je GB vor und hat keine Relation auf Person.
675  LEFT JOIN
676   ( SELECT gr.gml_id, r.artderrechtsgemeinschaft, r.beschriebderrechtsgemeinschaft, wr.v
677       FROM ax_namensnummer r
678       JOIN ax_buchungsblatt gr
679         ON r.istbestandteilvon = gr.gml_id -- Blatt <istBestandteilVon< NamNum (Rechtsgemeinschaft)
680      LEFT JOIN alkis_wertearten wr
681        ON cast(r.artderrechtsgemeinschaft AS character varying)=wr.k AND wr.element='ax_namensnummer' AND wr.bezeichnung='artderrechtsgemeinschaft'
682      WHERE NOT r.artderrechtsgemeinschaft IS NULL ) AS rg -- Rechtsgemeinschaft
683   ON rg.gml_id = gb.gml_id  -- zum GB
684  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
685UNION
686 SELECT
687    l.stgml,                                             -- Filter: gml_id aus "ax_lagebezeichnungkatalogeintrag"
688                                                         -- UNTERSCHIED zu exp_csv
689  -- F l u r s t ÃŒ c k
690    f.gml_id                             AS fsgml,       -- möglicher Filter FlurstÃŒcks-GML-ID
691    f.flurstueckskennzeichen             AS fs_kennz,
692    f.gemarkungsnummer,                                  -- Teile des FS-Kennz. noch mal einzeln
693    f.flurnummer, f.zaehler, f.nenner,
694    f.amtlicheflaeche                    AS fs_flae,
695    g.bezeichnung                        AS gemarkung,
696  -- G r u n d b u c h
697  --gb.gml_id                            AS gbgml,       -- möglicher Filter Grundbuch-GML-ID
698    gb.bezirk                            AS gb_bezirk,
699    gb.buchungsblattnummermitbuchstabenerweiterung AS gb_blatt,
700    z.bezeichnung                        AS beznam,      -- GB-Bezirks-Name
701  -- B u c h u n g s s t e l l e  (GrundstÃŒck)
702    s.laufendenummer                     AS bu_lfd,      -- BVNR
703    '=' || s.zaehler || '/' || s.nenner  AS bu_ant,      -- als Excel-Formel (nur bei Wohnungsgrundbuch JOIN ÃŒber 'Recht an')
704    s.buchungsart,                                       -- verschlÃŒsselt
705    wb.v                                 AS bu_art,      -- Buchungsart entschlÃŒsselt
706  -- N a m e n s N u m m e r  (Normalfall mit Person)
707    nn.laufendenummernachdin1421         AS nam_lfd,
708    '=' || nn.zaehler|| '/' || nn.nenner AS nam_ant,     -- als Excel-Formel
709  -- 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)
710    rg.artderrechtsgemeinschaft          AS nam_adr,
711    rg.v                                 AS nam_adrv,    -- Art der Rechtsgem. - Value zum Key
712    rg.beschriebderrechtsgemeinschaft    AS nam_bes,
713  -- P e r s o n
714  --p.gml_id                             AS psgml,       -- möglicher Filter Personen-GML-ID
715    p.anrede,                                            -- Anrede key
716    wp.v                                 AS anrv,        -- Anrede Value zum Key
717    p.vorname,
718    p.namensbestandteil,
719    p.nachnameoderfirma,                                 -- Familienname
720    p.geburtsdatum,
721   -- A d r e s s e  der Person
722    a.postleitzahlpostzustellung         AS plz,
723    a.ort_post                           AS ort,         -- Anschreifenzeile 1: PLZ+Ort
724    a.strasse,  a.hausnummer,                            -- Anschriftenzeile 2: Straße+HsNr
725    a.bestimmungsland                    AS land
726  FROM ax_flurstueck f                  -- FlurstÃŒck
727  JOIN flst_an_strasse  l               -- Lage (hier zusÀtzlicher JOIN gegenÃŒber Version "exp_csv")
728    ON l.fsgml = f.gml_id
729  JOIN ax_gemarkung g                   -- entschlÃŒsseln
730    ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer
731  -- FS >istGebucht> Buchungstelle  <an<  Buchungstelle
732 -- Variante mit 2 Buchungs-Stellen (Recht An)
733  JOIN ax_buchungsstelle dien           -- dienende Buchung
734    ON f.istgebucht = dien.gml_id
735  JOIN ax_buchungsstelle s              -- herrschende Buchung
736    ON dien.gml_id = ANY (s.an)         -- hat Recht an
737  JOIN ax_buchungsblatt  gb             -- Buchung >istBestandteilVon> Grundbuchblatt
738    ON gb.gml_id = s.istbestandteilvon
739  JOIN ax_buchungsblattbezirk z
740    ON gb.land=z.land AND gb.bezirk=z.bezirk
741  JOIN ax_namensnummer nn               -- Blatt <istBestandteilVon< NamNum
742    ON gb.gml_id = nn.istbestandteilvon
743  JOIN ax_person p                      -- NamNum >benennt> Person
744    ON p.gml_id = nn.benennt
745  LEFT JOIN ax_anschrift a
746    ON a.gml_id = ANY (p.hat)
747  -- E n t s c h l ÃŒ s s e l n:
748  LEFT JOIN alkis_wertearten wp         -- EntschlÃŒsseln "Person - Anrede"
749    ON cast(p.anrede AS character varying)=wp.k AND wp.element='ax_person' AND wp.bezeichnung='anrede'
750  LEFT JOIN alkis_wertearten wb         -- EntschlÃŒsseln "Buchungsart"
751    ON cast(s.buchungsart AS character varying) = wb.k
752   AND wb.element = 'ax_buchungsstelle'
753   AND wb.bezeichnung = 'buchungsart'
754  LEFT JOIN
755   ( SELECT gr.gml_id, r.artderrechtsgemeinschaft, r.beschriebderrechtsgemeinschaft, wr.v
756       FROM ax_namensnummer r
757       JOIN ax_buchungsblatt gr
758         ON r.istbestandteilvon = gr.gml_id -- Blatt <istBestandteilVon< NamNum (Rechtsgemeinschaft)
759      LEFT JOIN alkis_wertearten wr
760        ON cast(r.artderrechtsgemeinschaft AS character varying)=wr.k AND wr.element='ax_namensnummer' AND wr.bezeichnung='artderrechtsgemeinschaft'
761      WHERE NOT r.artderrechtsgemeinschaft IS NULL ) AS rg -- Rechtsgemeinschaft
762   ON rg.gml_id = gb.gml_id  -- zum GB
763  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
764    AND dien.endet IS NULL
765
766ORDER BY fsgml,      -- f.flurstueckskennzeichen,
767         gb_bezirk,  -- gb.bezirk,
768         gb_blatt,   -- gb.buchungsblattnummermitbuchstabenerweiterung,
769         bu_lfd,     -- s.laufendenummer,
770         nam_lfd;    -- nn.laufendenummernachdin1421
771
772COMMENT ON VIEW exp_csv_str
773 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.';
774
775
776-- B e r e c h t i g u n g e n
777-- ============================
778-- Analog "grant.sql"
779-- Die ALKIS-Navigation fÃŒr Mapbender 2.7 und die Buchauskunft verwendet den DB-User "mb27"
780
781-- Tabellen der ALKIS-Struktur
782-- -----------------------------------------------------------------------
783
784  GRANT SELECT ON TABLE public.ap_pto TO mb27;
785
786  GRANT SELECT ON TABLE public.ax_anschrift TO mb27;
787  GRANT SELECT ON TABLE public.ax_bauraumoderbodenordnungsrecht TO mb27;
788  GRANT SELECT ON TABLE public.ax_besondereflurstuecksgrenze TO mb27;
789  GRANT SELECT ON TABLE public.ax_buchungsblatt TO mb27;
790  GRANT SELECT ON TABLE public.ax_buchungsblattbezirk TO mb27;
791  GRANT SELECT ON TABLE public.ax_buchungsstelle TO mb27;
792  GRANT SELECT ON TABLE public.ax_bundesland TO mb27;
793  GRANT SELECT ON TABLE public.ax_dienststelle TO mb27;
794  GRANT SELECT ON TABLE public.ax_flurstueck TO mb27;
795  GRANT SELECT ON TABLE public.ax_gebaeude TO mb27;
796  GRANT SELECT ON TABLE public.ax_gemarkung TO mb27;
797  GRANT SELECT ON TABLE public.ax_gemarkungsteilflur TO mb27;
798  GRANT SELECT ON TABLE public.ax_gemeinde TO mb27;
799  GRANT SELECT ON TABLE public.ax_historischesflurstueck TO mb27;
800  GRANT SELECT ON TABLE public.ax_historischesflurstueckohneraumbezug TO mb27;
801  GRANT SELECT ON TABLE public.ax_kreisregion TO mb27;
802  GRANT SELECT ON TABLE public.ax_lagebezeichnungkatalogeintrag TO mb27;
803  GRANT SELECT ON TABLE public.ax_lagebezeichnungmithausnummer TO mb27;
804  GRANT SELECT ON TABLE public.ax_lagebezeichnungmitpseudonummer TO mb27;
805  GRANT SELECT ON TABLE public.ax_lagebezeichnungohnehausnummer TO mb27;
806  GRANT SELECT ON TABLE public.ax_namensnummer TO mb27;
807  GRANT SELECT ON TABLE public.ax_person TO mb27;
808  GRANT SELECT ON TABLE public.ax_regierungsbezirk TO mb27;
809
810-- Tabellen der norGIS-Metadaten (Ersatz fÃŒr SchlÃŒssel-Tabellen )
811-- -----------------------------------------------------------------------
812
813  GRANT SELECT ON TABLE public.alkis_elemente   TO mb27;
814  GRANT SELECT ON TABLE public.alkis_wertearten TO mb27;
815
816-- Tabellen des norGIS-PostProcessing  (Ersatz Classic-Post-Processing)
817-- -----------------------------------------------------------------------
818  -- Dies muss nach einer Datenbank-Aktualisierung neu berechtigt werden
819  GRANT SELECT ON TABLE public.gem_shl  TO mb27;
820  GRANT SELECT ON TABLE public.gema_shl TO mb27;
821  GRANT SELECT ON TABLE public.nutz_21  TO mb27;
822  GRANT SELECT ON TABLE public.nutz_shl TO mb27;
823
824-- Views in der norGIS-Struktur, die SchlÃŒssel-Tabellen ersetzen
825-- -----------------------------------------------------------------------
826--  Diese Views werden nicht verwendet.
827--  Es wird jeweils direkt die Tabelle "alkis_wertearten" benutzt.
828
829--GRANT SELECT ON TABLE public.v_andstrass_adf TO mb27;
830--GRANT SELECT ON TABLE public.v_baurecht_adf TO mb27;
831--GRANT SELECT ON TABLE public.v_bauteil_bauart TO mb27;
832--GRANT SELECT ON TABLE public.v_bewertg_klass TO mb27;
833--GRANT SELECT ON TABLE public.v_bs_buchungsart TO mb27;
834--GRANT SELECT ON TABLE public.v_bschaetz_bodenart TO mb27;
835--GRANT SELECT ON TABLE public.v_bschaetz_entsteh_klima TO mb27;
836--GRANT SELECT ON TABLE public.v_bschaetz_kulturart TO mb27;
837--GRANT SELECT ON TABLE public.v_bschaetz_sonst TO mb27;
838--GRANT SELECT ON TABLE public.v_bschaetz_zustandsstufe TO mb27;
839--GRANT SELECT ON TABLE public.v_datenerhebung TO mb27;
840--GRANT SELECT ON TABLE public.v_denkmal_adf TO mb27;
841--GRANT SELECT ON TABLE public.v_forstrecht_adf TO mb27;
842--GRANT SELECT ON TABLE public.v_forstrecht_besfkt TO mb27;
843--GRANT SELECT ON TABLE public.v_geb_bauweise TO mb27;
844--GRANT SELECT ON TABLE public.v_geb_dachform TO mb27;
845--GRANT SELECT ON TABLE public.v_geb_dachgeschossausbau TO mb27;
846--GRANT SELECT ON TABLE public.v_geb_funktion TO mb27;
847--GRANT SELECT ON TABLE public.v_geb_lagezeo TO mb27;
848--GRANT SELECT ON TABLE public.v_geb_weiterefkt TO mb27;
849--GRANT SELECT ON TABLE public.v_geb_zustand TO mb27;
850--GRANT SELECT ON TABLE public.v_grabloch_bedeutg TO mb27;
851--GRANT SELECT ON TABLE public.v_haeuser TO mb27;
852--GRANT SELECT ON TABLE public.v_klass_strass_adf TO mb27;
853--GRANT SELECT ON TABLE public.v_klass_wasser_adf TO mb27;
854--GRANT SELECT ON TABLE public.v_muster_merkmal TO mb27;
855--GRANT SELECT ON TABLE public.v_namnum_eigart TO mb27;
856--GRANT SELECT ON TABLE public.v_sbauwerk_bwfkt TO mb27;
857--GRANT SELECT ON TABLE public.v_sonstrecht_adf TO mb27;
858--GRANT SELECT ON TABLE public.v_umweltrecht_adf TO mb27;
859
860
861-- Berechtigung fuer Views
862-- -----------------------------------------------------------------------
863
864  -- Bausteine fÃŒr andere Views
865  GRANT SELECT ON TABLE public.doppelverbindung TO mb27;
866  GRANT SELECT ON TABLE public.flst_an_strasse  TO mb27;
867
868  -- alkis_export als CSV
869  GRANT SELECT ON TABLE public.exp_csv     TO mb27;
870  GRANT SELECT ON TABLE public.exp_csv_str TO mb27;
871
872-- Ende --
Note: See TracBrowser for help on using the repository browser.