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

Revision 378, 46.9 KB checked in by frank.jaeger, 7 years ago (diff)

Sortierung und Filter bei CSV-Export zur "Straße"

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