Index: trunk/umn/alkis_n/alkis_buchg.map
===================================================================
--- trunk/umn/alkis_n/alkis_buchg.map	(revision 396)
+++ trunk/umn/alkis_n/alkis_buchg.map	(revision 396)
@@ -0,0 +1,215 @@
+MAP
+# ALKIS: FlurstÃŒcke mit mehreren (2 bis 4) Buchungs-Stellen mit Rechte-Kaskade.  
+# Diese SonderfÃ€lle fÃŒr die Entwicklung der Buchauskunft suchen und anzeigen.
+# Die benÃ¶tigten Views werden definiert in /postcreate.d/views_buchungsketten.sql
+# Mit Maptrimmer eine ausfÃŒhrbare (schlanke) Version diese Mapfiles fÃŒr jedes GKZ (Mandant) erzeugen.
+# Stand
+#  2017-12-08 Entwurf
+	NAME "alkis_buchg_*gkz*"
+	EXTENT ...
+	PROJECTION "init=epsg:25832" END
+	STATUS ON
+	MAXSIZE 8400
+	FONTSET "/opt/gdi/fonts/arial.fnt"
+	UNITS METERS
+	SYMBOL
+		NAME "hatchsym"
+		TYPE hatch
+	END
+	WEB
+		MINSCALEDENOM 50
+		MAXSCALEDENOM 15000
+		METADATA
+			wms_title "ALKIS Buchungen"
+			wms_abstract "FlurstÃŒcke mit Buchungen an denen mehrere Buchungsstellen und GrundbÃŒcher kaskadierend berechtigt sind. Es werden 2 bis 4 Stufen der 'Rechte an' dargestellt."
+			wms_srs "EPSG:25832 EPSG:31467 EPSG:4326 EPSG:54004 EPSG:3034 EPSG:3857"
+			wms_bbox_extended "true"
+			wms_encoding "UTF-8"
+			wms_onlineresource "http://10.0.100.79/cgi-bin/mapserv7?map=/opt/gdi/alkisn/alkis_buchg_*gkz*.map"
+			wms_feature_info_mime_type "text/html"
+			wms_keywordlist "ALKIS,FlurstÃŒck,Buchungsstellen,Buchungsarten"
+			wms_fees "none"
+			wms_accessconstraints "fÃŒr den Dienstgebrauch"
+			wms_enable_request "*"
+			include "../wms/meta600fj.map"
+		END
+	END
+	LEGEND
+		STATUS ON
+		KEYSIZE 32 16
+		KEYSPACING 5 5
+		TRANSPARENT ON
+		LABEL
+			TYPE TRUETYPE
+			FONT 'arial'
+			SIZE 9
+			COLOR 1 1 1
+		END
+	END
+
+	LAYER
+		NAME "buchg2"
+		TYPE POLYGON
+		CONNECTIONTYPE POSTGIS
+		CONNECTION "host=10.0.100.73 dbname=alkis0*gkz* user=ms6 port=5432"
+		PROCESSING "CLOSE_CONNECTION=DEFER"
+		DATA "wkb_geometry from buchungsrechte_2wms using SRID=25832 using unique gml_id"
+		METADATA
+			wms_srs "EPSG:25832 EPSG:31467 EPSG:4326 EPSG:54004 EPSG:3034 EPSG:3857"
+			wms_title "2 Buchungsstellen"
+			wms_abstract "FlurstÃŒcke mit 2 gegenseitig berechtigten Buchungsstellen, z.B. 'Erbbaurecht' an 'GrundstÃŒck'. Dargestellt wir die Buchungsart der berechtigten (herrschenden) Buchungsstelle."
+			wms_keywordlist "Wohnungs-/Teileigentum, Miteigentum Par. 3 Abs. 4 GBO, Erbbaurecht, Aufgeteiltes Erbbaurecht WEG"
+		END
+		MINSCALEDENOM 50
+		MAXSCALEDENOM 15000
+		SYMBOLSCALEDENOM 750
+		CLASSITEM "buchungsart"
+		CLASS
+			EXPRESSION "1301"
+			NAME "Wohnungs-/Teileigentum"
+		#	NAME "1301 Wohnungs-/Teileigentum"
+			STYLE
+				OFFSET -4 -99 # innen
+				OUTLINECOLOR 20 0 250 OPACITY 55 # Blau
+				WIDTH 6 MINWIDTH 4 MAXWIDTH 10
+				PATTERN 4 5 END LINECAP butt
+			END
+		END
+		CLASS
+			EXPRESSION "2101"
+			NAME "Erbbaurecht"
+		#	NAME "2101 Erbbaurecht"
+			STYLE
+				OFFSET -4 -99
+				OUTLINECOLOR 20 250 0 OPACITY 55 # GrÃŒn
+				WIDTH 6 MINWIDTH 4 MAXWIDTH 10
+				PATTERN 4 5 END LINECAP butt
+			END
+		END
+		CLASS
+			EXPRESSION "2201"
+			NAME "Aufgeteiltes Erbbaurecht WEG"
+		#	NAME "2201 Aufgeteiltes Erbbaurecht WEG"
+			STYLE
+				OFFSET -4 -99
+				OUTLINECOLOR 0 250 250 OPACITY 55 # TÃŒrkis
+				WIDTH 6 MINWIDTH 4 MAXWIDTH 10
+				PATTERN 4 5 END LINECAP butt
+			END
+		END
+		CLASS
+			EXPRESSION "1302"
+			NAME "Miteigentum Par. 3 Abs. 4 GBO"
+		#	NAME "1302 Miteigentum Par. 3 Abs. 4 GBO"
+			STYLE
+				OFFSET -4 -99
+				OUTLINECOLOR 250 160 0 OPACITY 55 # Orange
+				WIDTH 6 MINWIDTH 4 MAXWIDTH 10
+				PATTERN 4 5 END LINECAP butt
+			END
+		END
+		CLASS # sonstige/Rest
+			STYLE
+				OFFSET -4 -99 # nach innen?
+				OUTLINECOLOR 250 0 20 OPACITY 40 # Rot
+				WIDTH 6 MINWIDTH 4 MAXWIDTH 10
+				PATTERN 4 5 END # feiner
+			END
+		END
+	END
+
+	LAYER
+		NAME "buchg3"
+		TYPE POLYGON
+		CONNECTIONTYPE POSTGIS
+		CONNECTION "host=10.0.100.73 dbname=alkis0*gkz* user=ms6 port=5432"
+		PROCESSING "CLOSE_CONNECTION=DEFER"
+		DATA "wkb_geometry from buchungsrechte_3wms using SRID=25832 using unique gml_id"
+		METADATA
+			wms_srs "EPSG:25832 EPSG:31467 EPSG:4326 EPSG:54004 EPSG:3034 EPSG:3857"
+			wms_title "3 Buchungsstellen"
+			wms_abstract "FlurstÃŒcke mit 3 gegenseitig berechtigten Buchungsstellen, z.B. 'Untererbbaurecht' an 'Erbbbaurecht' an 'GrundstÃŒck'. Dargestellt wir die Buchungsart der berechtigten (herrschenden) Buchungsstelle auf der 3. Ebene."
+			wms_keywordlist "Untererbbaurecht,Aufgeteiltes Untererbbaurecht WEG,Aufgeteiltes Recht Par. 3 Abs. 4 GBO,Wohnungs-/Teilerbbaurecht"
+		END
+		MINSCALEDENOM 50
+		MAXSCALEDENOM 15000
+		CLASSITEM "buchungsart"
+
+		CLASS
+			EXPRESSION "2202"
+			NAME "Aufgeteiltes Untererbbaurecht WEG"
+		#	NAME "2202 Aufgeteiltes Untererbbaurecht WEG"
+			STYLE
+				COLOR 20 0 250 OPACITY 25 # Blau
+			END
+		END
+		CLASS
+			EXPRESSION "2102"
+			NAME "Untererbbaurecht"
+		#	NAME "2102 Untererbbaurecht"
+			STYLE
+				COLOR 20 250 0 OPACITY 25 # GrÃŒn
+			END
+		END
+		CLASS
+			EXPRESSION "2301"
+			NAME "Wohnungs-/Teilerbbaurecht"
+		#	NAME "2301 Wohnungs-/Teilerbbaurecht"
+			STYLE
+				COLOR 0 250 250 OPACITY 25 # TÃŒrkis
+			END
+		END
+		CLASS
+			EXPRESSION "2203"
+			NAME "Aufgeteiltes Recht Par. 3 Abs. 4 GBO"
+		#	NAME "2203 Aufgeteiltes Recht Par. 3 Abs. 4 GBO"
+			STYLE
+				COLOR 250 160 0 OPACITY 25 # Orange
+			END
+		END
+		CLASS # sonstige/Rest
+			STYLE
+				COLOR 250 0 20 OPACITY 20 # Rot
+			END
+		END
+	END
+
+	LAYER
+		NAME "buchg4"
+		TYPE POLYGON
+		CONNECTIONTYPE POSTGIS
+		CONNECTION "host=10.0.100.73 dbname=alkis0*gkz* user=ms6 port=5432"
+		PROCESSING "CLOSE_CONNECTION=DEFER"
+		DATA "wkb_geometry from buchungsrechte_4wms using SRID=25832 using unique gml_id"
+		METADATA
+			wms_srs "EPSG:25832 EPSG:31467 EPSG:4326 EPSG:54004 EPSG:3034 EPSG:3857"
+			wms_title "4 Buchungsstellen"
+			wms_abstract "FlurstÃŒcke mit 4 gegenseitig berechtigten Buchungsstellen, z.B. 'Wohnungs-/Teiluntererbbaurecht'. Dargestellt wir die Buchungsart der berechtigten (herrschenden) Buchungsstelle auf der 4. Ebene."
+			wms_keywordlist "Wohnungs-/Teiluntererbbaurecht"
+		END
+		MINSCALEDENOM 50
+		MAXSCALEDENOM 15000
+		SYMBOLSCALEDENOM 750
+		CLASSITEM "buchungsart"
+		CLASS
+			EXPRESSION "2302"
+			NAME "Wohnungs-/Teiluntererbbaurecht"
+		#	NAME "2302 Wohnungs-/Teiluntererbbaurecht"
+			STYLE
+				SYMBOL hatchsym ANGLE 45
+				COLOR 20 250 0 OPACITY 70 # GrÃŒn
+				SIZE 6 MINSIZE 3 MAXSIZE 12
+				WIDTH 2 MINWIDTH 1 MAXWIDTH 2
+				
+			END
+		END
+		CLASS # sonstige/Rest
+			STYLE
+				SYMBOL hatchsym ANGLE 45
+				COLOR 250 0 20 OPACITY 50 # Rot
+				SIZE 8 MINSIZE 4 MAXSIZE 16
+				WIDTH 2 MINWIDTH 1 MAXWIDTH 3
+			END
+		END
+	END
+END
Index: trunk/import/norgis_alkis_pp/postcreate.de/views_exp_csv.sql
===================================================================
--- trunk/import/norgis_alkis_pp/postcreate.de/views_exp_csv.sql	(revision 396)
+++ trunk/import/norgis_alkis_pp/postcreate.de/views_exp_csv.sql	(revision 396)
@@ -0,0 +1,456 @@
+
+-- ===================================================================================
+--  ALKIS-PostGIS   Mapbender-Navigation und Buchauskunft fÃŒr NorGIS-ALKIS-Importer
+-- ===================================================================================
+
+-- Aufgabe:
+-- Views bereit stellen fÃŒr die ALKIS-Navigation fÃŒr Mapbender 2 und die Buch-Auskunft und spezielle WMS.
+
+-- AusfÃŒhrung in:
+-- Step "postcreate.d" des ALKIS-Importers. Hier also nur Definitionen machen, keine Daten bearbeiten.
+
+--Stand 
+--  2016-02-23
+--  2016-11-24 Index auf ax.person.nachnameoderfirma fÃŒr WMS Flurstuecke_kommunal
+--  2016-12-01 exp_csv: Fehlerkorrektur bei EntschlÃŒsselung der Buchungsart
+--             Optimierte Version (ohne Doppelverbindung)
+--  2017-02-23 Spalte "fall" aus View "flst_an_strasse" im View "exp_csv_str" ausgeben.
+--             Darauf basiert ein neuer Filter im Programm "alkisexport.php".
+--			Sortierung FS-Kennz. repariert in Views "exp_csv" und "exp_csv_str"
+--  2017-10-10 Berechtigungen rausgenommen in getrennte Datei
+--  2017-12-06 Umbenennung von "x_classic2norgis.sql" nach "views_exp_csv.sql"
+
+-- ToDo:
+--  - die alten Ãbersichten "pp_flur", "pp_gemarkung" und "pp_gemeinde" wieder erzeugen
+--    Siehe Script: "pp_gebiete.sql" (FÃŒllen) und Teile von "pp_definition.sql" (DB-Struktur).
+--  - Statt den View "flst_an_strasse" im View "exp_csv_str" einzubinden kÃ¶nnte ein 4fach-UNION schneller sein. Testen.
+
+
+-- I n d i c e s
+-- ============================
+
+-- Tabelle "ax_gemarkungsteilflur" sollte Such-Index erhalten auf "gemarkung".
+-- FÃŒr Auflistung aller Fluren zur Gemarkung in Script "alkisnav_fls", Function "EineGemarkung".
+
+
+-- Der WMS "Flurstuecke_Kommunal" (aus View "st_flurst[gkz][e|r]") wird langsam, wenn er in einer kreisweiten Datenbank ausgefÃŒhrt wird.
+-- Das Filter-Feld benÃ¶tigt einen Index:
+DROP INDEX if exists ax_person_nname;
+CREATE INDEX ax_person_nname
+  ON ax_person USING btree (nachnameoderfirma COLLATE pg_catalog."default");
+
+
+-- V i e w s
+-- ============================
+
+
+-- Bausteine fÃŒr andere Views:
+-- ---------------------------
+
+-- Ein View, der die Verbindung von FlurstÃŒck zur StraÃentabelle fÃŒr zwei verschiedene FÃ€lle herstellt.
+-- Einmal ÃŒber die Lagebezeichnung MIT Hausnummer und einmal OHNE.
+-- Dies kann als "MittelstÃŒck" in den anderen Views eingefÃŒgt werden.
+
+--           DROP VIEW public.flst_an_strasse;
+CREATE OR REPLACE VIEW public.flst_an_strasse
+AS
+  -- FlurstÃŒck >weistAuf> ax_lagebezeichnungMIThausnummer <JOIN> ax_lagebezeichnungkatalogeintrag
+  SELECT fm.gml_id AS fsgml,
+         sm.gml_id AS stgml,                 -- Filter: gml_id der StraÃe
+         'm' AS fall                         -- SÃ€tze unterschieden: Mit HsNr
+    FROM ax_flurstueck fm                    -- FlurstÃŒck Mit
+    JOIN ax_lagebezeichnungmithausnummer lm  -- Lage MIT
+      ON lm.gml_id = ANY (fm.weistauf)
+    JOIN ax_lagebezeichnungkatalogeintrag sm
+      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 
+   WHERE lm.endet IS NULL AND fm.endet IS NULL -- nichts Historisches
+ UNION
+  -- FlurstÃŒck >zeigtAuf> ax_lagebezeichnungOHNEhausnummer <JOIN> ax_lagebezeichnungkatalogeintrag
+  SELECT fo.gml_id AS fsgml,
+         so.gml_id AS stgml,                 -- Filter: gml_id der StraÃe
+         'o' AS fall                         -- SÃ€tze unterschieden: Ohne HsNr
+    FROM ax_flurstueck fo                    -- FlurstÃŒck OHNE
+    JOIN ax_lagebezeichnungohnehausnummer lo -- Lage OHNE
+      ON lo.gml_id = ANY (fo.zeigtauf)
+    JOIN ax_lagebezeichnungkatalogeintrag so -- StraÃe OHNE
+      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
+   WHERE lo.endet IS NULL AND fo.endet IS NULL; -- nichts Historisches
+
+COMMENT ON VIEW public.flst_an_strasse 
+ IS 'ALKIS-Beziehung von FlurstÃŒck zu StraÃentabelle. UNION-Zusammenfassung der FÃ€lle MIT und OHNE Hausnummer.';
+
+-- Muss man noch dafÃŒr sorgen, dass FlurstÃŒck nicht doppelt vorkommt? z.B. mit DISTINCT
+-- Oder mÃŒssen ggf. mehrfache FS im Programm ÃŒbersprungen werden?
+
+
+-- Generelle Export-Struktur "FlurstÃŒck - Buchung - Grundbuch - Person"
+-- --------------------------------------------------------------------
+-- Wird benÃ¶tigt im Auskunft-Modul "alkisexport.php":
+-- Je nach aufrufendem Modul wird der Filter (WHERE) an anderer Stelle gesetzt (gml_id von FS, GB oder Pers.)
+-- FÃŒr Filter nach "StraÃe" siehe die nachfolgende Sonderversion "exp_csv_str".
+
+-- Problem / Konflikt:
+-- Es kann nur eine lineare Struktur aus Spalten und Zeilen exportiert werden. 
+-- Wenn nicht nur die Daten des Ausgangs-Objektes exportiert werden, sondern auch verbundene Tabellen in 
+-- einer 1:N-Struktur, dann verdoppeln sich Zeileninhalte und es werden redundante Daten erzeugt. 
+-- Diese Redundanzen mÃŒssen vom dem Programm gefiltert werden, das die Daten ÃŒber eine Schnittstelle einliest.
+-- Anwendungs-Beispiel: Abrechnung von AnliegerbeitrÃ€gen.
+
+
+DROP VIEW IF EXISTS exp_csv;
+CREATE OR REPLACE VIEW exp_csv
+AS
+ SELECT
+  -- F l u r s t ÃŒ c k
+    f.gml_id                             AS fsgml,       -- mÃ¶glicher Filter FlurstÃŒcks-GML-ID
+    f.flurstueckskennzeichen             AS fs_kennz,
+    f.gemarkungsnummer,                                  -- Teile des FS-Kennz. noch mal einzeln
+    f.flurnummer, f.zaehler, f.nenner, 
+    f.amtlicheflaeche                    AS fs_flae,
+    g.bezeichnung                        AS gemarkung,
+  -- G r u n d b u c h
+    gb.gml_id                            AS gbgml,       -- mÃ¶glicher Filter Grundbuch-GML-ID
+    gb.bezirk                            AS gb_bezirk,
+    gb.buchungsblattnummermitbuchstabenerweiterung AS gb_blatt,
+    z.bezeichnung                        AS beznam,      -- GB-Bezirks-Name
+  -- B u c h u n g s s t e l l e  (GrundstÃŒck)
+    s.laufendenummer                     AS bu_lfd,      -- BVNR
+    '=' || s.zaehler || '/' || s.nenner  AS bu_ant,      -- als Excel-Formel (nur bei Wohnungsgrundbuch JOIN ÃŒber 'Recht an')
+    s.buchungsart,                                       -- verschlÃŒsselt
+    wb.v                                 AS bu_art,      -- Buchungsart entschlÃŒsselt
+  -- N a m e n s N u m m e r  (Normalfall mit Person)
+    nn.laufendenummernachdin1421         AS nam_lfd, 
+    '=' || nn.zaehler|| '/' || nn.nenner AS nam_ant,     -- als Excel-Formel
+  -- 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)
+    rg.artderrechtsgemeinschaft          AS nam_adr,
+    rg.v                                 AS nam_adrv,    -- Art der Rechtsgem. - Value zum Key
+    rg.beschriebderrechtsgemeinschaft    AS nam_bes,
+  -- P e r s o n
+    p.gml_id                             AS psgml,       -- mÃ¶glicher Filter Personen-GML-ID
+    p.anrede,                                            -- Anrede key
+    wp.v                                 AS anrv,        -- Anrede Value zum Key
+    p.vorname,
+    p.namensbestandteil,
+    p.nachnameoderfirma,                                 -- Familienname
+    p.geburtsdatum,
+  -- A d r e s s e  der Person
+    a.postleitzahlpostzustellung         AS plz,
+    a.ort_post                           AS ort,         -- Anschreifenzeile 1: PLZ+Ort
+    a.strasse,  a.hausnummer,                            -- Anschriftenzeile 2: StraÃe+HsNr
+    a.bestimmungsland                    AS land
+  FROM ax_flurstueck    f               -- FlurstÃŒck
+  JOIN ax_gemarkung g                   -- entschlÃŒsseln
+    ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer 
+  JOIN ax_buchungsstelle s              -- FS >istGebucht> Buchungstelle
+    ON f.istgebucht = s.gml_id
+  JOIN ax_buchungsblatt  gb             -- Buchung >istBestandteilVon> Grundbuchblatt
+    ON gb.gml_id = s.istbestandteilvon
+  JOIN ax_buchungsblattbezirk z 
+    ON gb.land=z.land AND gb.bezirk=z.bezirk 
+  JOIN ax_namensnummer nn               -- Blatt <istBestandteilVon< NamNum
+    ON gb.gml_id = nn.istbestandteilvon
+  JOIN ax_person p                      -- NamNum >benennt> Person 
+    ON p.gml_id = nn.benennt
+  LEFT JOIN ax_anschrift a 
+    ON a.gml_id = ANY (p.hat)
+  -- E n t s c h l ÃŒ s s e l n:
+  LEFT JOIN alkis_wertearten wp         -- EntschlÃŒsseln "Person - Anrede"
+    ON cast(p.anrede AS character varying) = wp.k 
+   AND wp.element = 'ax_person' 
+   AND wp.bezeichnung = 'anrede' 
+  LEFT JOIN alkis_wertearten wb         -- EntschlÃŒsseln "Buchungsart"
+    ON cast(s.buchungsart AS character varying) = wb.k
+ -- buchungsart = integer / .k  = char 4stellig
+   AND wb.element = 'ax_buchungsstelle'
+   AND wb.bezeichnung = 'buchungsart' 
+  -- 2mal "LEFT JOIN" verdoppelt die Zeile in der Ausgabe. Darum als Subquery in Spalten packen:
+  -- Noch mal "GB -> NamNum", aber dieses Mal fÃŒr "Rechtsgemeinschaft".
+  -- Kommt max. 1 mal je GB vor und hat keine Relation auf Person.
+  LEFT JOIN
+   ( SELECT gr.gml_id, r.artderrechtsgemeinschaft, r.beschriebderrechtsgemeinschaft, wr.v
+       FROM ax_namensnummer r 
+       JOIN ax_buchungsblatt gr
+         ON r.istbestandteilvon = gr.gml_id -- Blatt <istBestandteilVon< NamNum (Rechtsgemeinschaft) 
+      LEFT JOIN alkis_wertearten wr
+        ON cast(r.artderrechtsgemeinschaft AS character varying)=wr.k AND wr.element='ax_namensnummer' AND wr.bezeichnung='artderrechtsgemeinschaft' 
+      WHERE NOT r.artderrechtsgemeinschaft IS NULL ) AS rg -- Rechtsgemeinschaft
+   ON rg.gml_id = gb.gml_id  -- zum GB
+  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
+UNION
+ SELECT
+  -- F l u r s t ÃŒ c k
+    f.gml_id                             AS fsgml,       -- mÃ¶glicher Filter FlurstÃŒcks-GML-ID
+    f.flurstueckskennzeichen             AS fs_kennz,
+    f.gemarkungsnummer,                                  -- Teile des FS-Kennz. noch mal einzeln
+    f.flurnummer, f.zaehler, f.nenner, 
+    f.amtlicheflaeche                    AS fs_flae,
+    g.bezeichnung                        AS gemarkung,
+  -- G r u n d b u c h
+    gb.gml_id                            AS gbgml,       -- mÃ¶glicher Filter Grundbuch-GML-ID
+    gb.bezirk                            AS gb_bezirk,
+    gb.buchungsblattnummermitbuchstabenerweiterung AS gb_blatt,
+    z.bezeichnung                        AS beznam,      -- GB-Bezirks-Name
+  -- B u c h u n g s s t e l l e  (GrundstÃŒck)
+    s.laufendenummer                     AS bu_lfd,      -- BVNR
+    '=' || s.zaehler || '/' || s.nenner  AS bu_ant,      -- als Excel-Formel (nur bei Wohnungsgrundbuch JOIN ÃŒber 'Recht an')
+    s.buchungsart,                                       -- verschlÃŒsselt
+    wb.v                                 AS bu_art,      -- Buchungsart entschlÃŒsselt
+  -- N a m e n s N u m m e r  (Normalfall mit Person)
+    nn.laufendenummernachdin1421         AS nam_lfd, 
+    '=' || nn.zaehler|| '/' || nn.nenner AS nam_ant,     -- als Excel-Formel
+  -- 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)
+    rg.artderrechtsgemeinschaft          AS nam_adr,
+    rg.v                                 AS nam_adrv,    -- Art der Rechtsgem. - Value zum Key
+    rg.beschriebderrechtsgemeinschaft    AS nam_bes,
+  -- P e r s o n
+    p.gml_id                             AS psgml,       -- mÃ¶glicher Filter Personen-GML-ID
+    p.anrede,                                            -- Anrede key
+    wp.v                                 AS anrv,        -- Anrede Value zum Key
+    p.vorname,
+    p.namensbestandteil,
+    p.nachnameoderfirma,                                 -- Familienname
+    p.geburtsdatum,
+   -- A d r e s s e  der Person
+    a.postleitzahlpostzustellung         AS plz,
+    a.ort_post                           AS ort,         -- Anschreifenzeile 1: PLZ+Ort
+    a.strasse,  a.hausnummer,                            -- Anschriftenzeile 2: StraÃe+HsNr
+    a.bestimmungsland                    AS land
+  FROM ax_flurstueck f                  -- FlurstÃŒck
+  JOIN ax_gemarkung g                   -- entschlÃŒsseln
+    ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer 
+  -- FS >istGebucht> Buchungstelle  <an<  Buchungstelle
+ -- Variante mit 2 Buchungs-Stellen (Recht An)
+  JOIN ax_buchungsstelle dien           -- dienende Buchung
+    ON f.istgebucht = dien.gml_id
+  JOIN ax_buchungsstelle s              -- herrschende Buchung
+    ON dien.gml_id = ANY (s.an)         -- hat Recht an
+  JOIN ax_buchungsblatt  gb             -- Buchung >istBestandteilVon> Grundbuchblatt
+    ON gb.gml_id = s.istbestandteilvon
+  JOIN ax_buchungsblattbezirk z 
+    ON gb.land=z.land AND gb.bezirk=z.bezirk 
+  JOIN ax_namensnummer nn               -- Blatt <istBestandteilVon< NamNum
+    ON gb.gml_id = nn.istbestandteilvon
+  JOIN ax_person p                      -- NamNum >benennt> Person 
+    ON p.gml_id = nn.benennt
+  LEFT JOIN ax_anschrift a 
+    ON a.gml_id = ANY (p.hat)
+  -- E n t s c h l ÃŒ s s e l n:
+  LEFT JOIN alkis_wertearten wp         -- EntschlÃŒsseln "Person - Anrede"
+    ON cast(p.anrede AS character varying)=wp.k AND wp.element='ax_person' AND wp.bezeichnung='anrede' 
+  LEFT JOIN alkis_wertearten wb         -- EntschlÃŒsseln "Buchungsart"
+    ON cast(s.buchungsart AS character varying) = wb.k 
+   AND wb.element = 'ax_buchungsstelle' 
+   AND wb.bezeichnung = 'buchungsart' 
+  LEFT JOIN
+   ( SELECT gr.gml_id, r.artderrechtsgemeinschaft, r.beschriebderrechtsgemeinschaft, wr.v
+       FROM ax_namensnummer r 
+       JOIN ax_buchungsblatt gr
+         ON r.istbestandteilvon = gr.gml_id -- Blatt <istBestandteilVon< NamNum (Rechtsgemeinschaft) 
+      LEFT JOIN alkis_wertearten wr
+        ON cast(r.artderrechtsgemeinschaft AS character varying)=wr.k AND wr.element='ax_namensnummer' AND wr.bezeichnung='artderrechtsgemeinschaft' 
+      WHERE NOT r.artderrechtsgemeinschaft IS NULL ) AS rg -- Rechtsgemeinschaft
+   ON rg.gml_id = gb.gml_id  -- zum GB
+  WHERE f.endet IS NULL AND s.endet IS NULL and gb.endet IS NULL and nn.endet IS NULL AND p.endet IS NULL
+    AND dien.endet IS NULL
+
+ORDER BY fs_kennz,   -- f.flurstueckskennzeichen, 
+      -- fsgml,      
+         gb_bezirk,  -- gb.bezirk, 
+         gb_blatt,   -- gb.buchungsblattnummermitbuchstabenerweiterung,
+         bu_lfd,     -- s.laufendenummer,
+         nam_lfd;    -- nn.laufendenummernachdin1421
+
+COMMENT ON VIEW exp_csv 
+ 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.';
+
+
+-- Eine Variante des View "exp_csv":
+-- Hier wird zusÃ€tzlich der Baustein "flst_an_strasse" verwendet.
+-- Der Filter "WHERE stgml= " auf die "gml_id" von "ax_lagebezeichnungkatalogeintrag" sollte gesetzt werden
+-- um nur die FlurstÃŒcke zu bekommen, die an einer StraÃe liegen.
+
+DROP VIEW IF EXISTS exp_csv_str;
+
+CREATE OR REPLACE VIEW exp_csv_str
+AS
+ SELECT
+    l.stgml,                                             -- Filter: gml_id aus "ax_lagebezeichnungkatalogeintrag"
+                                                         -- UNTERSCHIED zu exp_csv
+    l.fall,                                              -- mit/ohne Hausnummer zur Lage
+  -- F l u r s t ÃŒ c k
+    f.gml_id                             AS fsgml,       -- mÃ¶glicher Filter FlurstÃŒcks-GML-ID
+    f.flurstueckskennzeichen             AS fs_kennz,
+    f.gemarkungsnummer,                                  -- Teile des FS-Kennz. noch mal einzeln
+    f.flurnummer, f.zaehler, f.nenner, 
+    f.amtlicheflaeche                    AS fs_flae,
+    g.bezeichnung                        AS gemarkung,
+  -- G r u n d b u c h
+  --gb.gml_id                            AS gbgml,       -- mÃ¶glicher Filter Grundbuch-GML-ID
+    gb.bezirk                            AS gb_bezirk,
+    gb.buchungsblattnummermitbuchstabenerweiterung AS gb_blatt,
+    z.bezeichnung                        AS beznam,      -- GB-Bezirks-Name
+  -- B u c h u n g s s t e l l e  (GrundstÃŒck)
+    s.laufendenummer                     AS bu_lfd,      -- BVNR
+    '=' || s.zaehler || '/' || s.nenner  AS bu_ant,      -- als Excel-Formel (nur bei Wohnungsgrundbuch JOIN ÃŒber 'Recht an')
+    s.buchungsart,                                       -- verschlÃŒsselt
+    wb.v                                 AS bu_art,      -- Buchungsart entschlÃŒsselt
+  -- N a m e n s N u m m e r  (Normalfall mit Person)
+    nn.laufendenummernachdin1421         AS nam_lfd, 
+    '=' || nn.zaehler|| '/' || nn.nenner AS nam_ant,     -- als Excel-Formel
+  -- 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)
+    rg.artderrechtsgemeinschaft          AS nam_adr,
+    rg.v                                 AS nam_adrv,    -- Art der Rechtsgem. - Value zum Key
+    rg.beschriebderrechtsgemeinschaft    AS nam_bes,
+  -- P e r s o n
+  --p.gml_id                             AS psgml,       -- mÃ¶glicher Filter Personen-GML-ID
+    p.anrede,                                            -- Anrede key
+    wp.v                                 AS anrv,        -- Anrede Value zum Key
+    p.vorname,
+    p.namensbestandteil,
+    p.nachnameoderfirma,                                 -- Familienname
+    p.geburtsdatum,
+  -- A d r e s s e  der Person
+    a.postleitzahlpostzustellung         AS plz,
+    a.ort_post                           AS ort,         -- Anschreifenzeile 1: PLZ+Ort
+    a.strasse,  a.hausnummer,                            -- Anschriftenzeile 2: StraÃe+HsNr
+    a.bestimmungsland                    AS land
+  FROM ax_flurstueck    f               -- FlurstÃŒck
+  JOIN flst_an_strasse  l               -- Lage (hier zusÃ€tzlicher JOIN gegenÃŒber Version "exp_csv") 
+    ON l.fsgml = f.gml_id               -- ToDo: ++ Durch UNION ersetzen! Oder durch Subquery? ++
+  JOIN ax_gemarkung g                   -- entschlÃŒsseln
+    ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer 
+  JOIN ax_buchungsstelle s              -- FS >istGebucht> Buchungstelle
+    ON f.istgebucht = s.gml_id
+  JOIN ax_buchungsblatt  gb             -- Buchung >istBestandteilVon> Grundbuchblatt
+    ON gb.gml_id = s.istbestandteilvon
+  JOIN ax_buchungsblattbezirk z 
+    ON gb.land=z.land AND gb.bezirk=z.bezirk 
+  JOIN ax_namensnummer nn               -- Blatt <istBestandteilVon< NamNum
+    ON gb.gml_id = nn.istbestandteilvon
+  JOIN ax_person p                      -- NamNum >benennt> Person 
+    ON p.gml_id = nn.benennt
+  LEFT JOIN ax_anschrift a 
+    ON a.gml_id = ANY (p.hat)
+  -- E n t s c h l ÃŒ s s e l n:
+  LEFT JOIN alkis_wertearten wp         -- EntschlÃŒsseln "Person - Anrede"
+    ON cast(p.anrede AS character varying) = wp.k 
+   AND wp.element = 'ax_person' 
+   AND wp.bezeichnung = 'anrede' 
+  LEFT JOIN alkis_wertearten wb         -- EntschlÃŒsseln "Buchungsart"
+    ON cast(s.buchungsart AS character varying) = wb.k
+ -- buchungsart = integer / .k  = char 4stellig
+   AND wb.element = 'ax_buchungsstelle'
+   AND wb.bezeichnung = 'buchungsart' 
+  -- 2mal "LEFT JOIN" verdoppelt die Zeile in der Ausgabe. Darum als Subquery in Spalten packen:
+  -- Noch mal "GB -> NamNum", aber dieses Mal fÃŒr "Rechtsgemeinschaft".
+  -- Kommt max. 1 mal je GB vor und hat keine Relation auf Person.
+  LEFT JOIN
+   ( SELECT gr.gml_id, r.artderrechtsgemeinschaft, r.beschriebderrechtsgemeinschaft, wr.v
+       FROM ax_namensnummer r 
+       JOIN ax_buchungsblatt gr
+         ON r.istbestandteilvon = gr.gml_id -- Blatt <istBestandteilVon< NamNum (Rechtsgemeinschaft) 
+      LEFT JOIN alkis_wertearten wr
+        ON cast(r.artderrechtsgemeinschaft AS character varying)=wr.k AND wr.element='ax_namensnummer' AND wr.bezeichnung='artderrechtsgemeinschaft' 
+      WHERE NOT r.artderrechtsgemeinschaft IS NULL ) AS rg -- Rechtsgemeinschaft
+   ON rg.gml_id = gb.gml_id  -- zum GB
+  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
+UNION
+ SELECT
+    l.stgml,                                             -- Filter: gml_id aus "ax_lagebezeichnungkatalogeintrag"
+                                                         -- UNTERSCHIED zu exp_csv
+    l.fall,                                              -- mit/ohne Hausnummer zur Lage
+  -- F l u r s t ÃŒ c k
+    f.gml_id                             AS fsgml,       -- mÃ¶glicher Filter FlurstÃŒcks-GML-ID
+    f.flurstueckskennzeichen             AS fs_kennz,
+    f.gemarkungsnummer,                                  -- Teile des FS-Kennz. noch mal einzeln
+    f.flurnummer, f.zaehler, f.nenner, 
+    f.amtlicheflaeche                    AS fs_flae,
+    g.bezeichnung                        AS gemarkung,
+  -- G r u n d b u c h
+  --gb.gml_id                            AS gbgml,       -- mÃ¶glicher Filter Grundbuch-GML-ID
+    gb.bezirk                            AS gb_bezirk,
+    gb.buchungsblattnummermitbuchstabenerweiterung AS gb_blatt,
+    z.bezeichnung                        AS beznam,      -- GB-Bezirks-Name
+  -- B u c h u n g s s t e l l e  (GrundstÃŒck)
+    s.laufendenummer                     AS bu_lfd,      -- BVNR
+    '=' || s.zaehler || '/' || s.nenner  AS bu_ant,      -- als Excel-Formel (nur bei Wohnungsgrundbuch JOIN ÃŒber 'Recht an')
+    s.buchungsart,                                       -- verschlÃŒsselt
+    wb.v                                 AS bu_art,      -- Buchungsart entschlÃŒsselt
+  -- N a m e n s N u m m e r  (Normalfall mit Person)
+    nn.laufendenummernachdin1421         AS nam_lfd, 
+    '=' || nn.zaehler|| '/' || nn.nenner AS nam_ant,     -- als Excel-Formel
+  -- 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)
+    rg.artderrechtsgemeinschaft          AS nam_adr,
+    rg.v                                 AS nam_adrv,    -- Art der Rechtsgem. - Value zum Key
+    rg.beschriebderrechtsgemeinschaft    AS nam_bes,
+  -- P e r s o n
+  --p.gml_id                             AS psgml,       -- mÃ¶glicher Filter Personen-GML-ID
+    p.anrede,                                            -- Anrede key
+    wp.v                                 AS anrv,        -- Anrede Value zum Key
+    p.vorname,
+    p.namensbestandteil,
+    p.nachnameoderfirma,                                 -- Familienname
+    p.geburtsdatum,
+   -- A d r e s s e  der Person
+    a.postleitzahlpostzustellung         AS plz,
+    a.ort_post                           AS ort,         -- Anschreifenzeile 1: PLZ+Ort
+    a.strasse,  a.hausnummer,                            -- Anschriftenzeile 2: StraÃe+HsNr
+    a.bestimmungsland                    AS land
+  FROM ax_flurstueck f                  -- FlurstÃŒck
+  JOIN flst_an_strasse  l               -- Lage (hier zusÃ€tzlicher JOIN gegenÃŒber Version "exp_csv") 
+    ON l.fsgml = f.gml_id 
+  JOIN ax_gemarkung g                   -- entschlÃŒsseln
+    ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer 
+  -- FS >istGebucht> Buchungstelle  <an<  Buchungstelle
+ -- Variante mit 2 Buchungs-Stellen (Recht An)
+  JOIN ax_buchungsstelle dien           -- dienende Buchung
+    ON f.istgebucht = dien.gml_id
+  JOIN ax_buchungsstelle s              -- herrschende Buchung
+    ON dien.gml_id = ANY (s.an)         -- hat Recht an
+  JOIN ax_buchungsblatt  gb             -- Buchung >istBestandteilVon> Grundbuchblatt
+    ON gb.gml_id = s.istbestandteilvon
+  JOIN ax_buchungsblattbezirk z 
+    ON gb.land=z.land AND gb.bezirk=z.bezirk 
+  JOIN ax_namensnummer nn               -- Blatt <istBestandteilVon< NamNum
+    ON gb.gml_id = nn.istbestandteilvon
+  JOIN ax_person p                      -- NamNum >benennt> Person 
+    ON p.gml_id = nn.benennt
+  LEFT JOIN ax_anschrift a 
+    ON a.gml_id = ANY (p.hat)
+  -- E n t s c h l ÃŒ s s e l n:
+  LEFT JOIN alkis_wertearten wp         -- EntschlÃŒsseln "Person - Anrede"
+    ON cast(p.anrede AS character varying)=wp.k AND wp.element='ax_person' AND wp.bezeichnung='anrede' 
+  LEFT JOIN alkis_wertearten wb         -- EntschlÃŒsseln "Buchungsart"
+    ON cast(s.buchungsart AS character varying) = wb.k 
+   AND wb.element = 'ax_buchungsstelle' 
+   AND wb.bezeichnung = 'buchungsart' 
+  LEFT JOIN
+   ( SELECT gr.gml_id, r.artderrechtsgemeinschaft, r.beschriebderrechtsgemeinschaft, wr.v
+       FROM ax_namensnummer r 
+       JOIN ax_buchungsblatt gr
+         ON r.istbestandteilvon = gr.gml_id -- Blatt <istBestandteilVon< NamNum (Rechtsgemeinschaft) 
+      LEFT JOIN alkis_wertearten wr
+        ON cast(r.artderrechtsgemeinschaft AS character varying)=wr.k AND wr.element='ax_namensnummer' AND wr.bezeichnung='artderrechtsgemeinschaft' 
+      WHERE NOT r.artderrechtsgemeinschaft IS NULL ) AS rg -- Rechtsgemeinschaft
+   ON rg.gml_id = gb.gml_id  -- zum GB
+  WHERE f.endet IS NULL AND s.endet IS NULL and gb.endet IS NULL and nn.endet IS NULL AND p.endet IS NULL
+    AND dien.endet IS NULL
+
+ORDER BY fs_kennz,   -- f.flurstueckskennzeichen, 
+         gb_bezirk,  -- gb.bezirk, 
+         gb_blatt,   -- gb.buchungsblattnummermitbuchstabenerweiterung,
+         bu_lfd,     -- s.laufendenummer,
+         nam_lfd;    -- nn.laufendenummernachdin1421
+
+COMMENT ON VIEW exp_csv_str 
+ 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.';
+
+
+-- Berechtigung fuer Views
+-- ============================
+
+  GRANT SELECT ON TABLE public.flst_an_strasse  TO mb27;
+  GRANT SELECT ON TABLE public.exp_csv          TO mb27;
+  GRANT SELECT ON TABLE public.exp_csv_str      TO mb27;
+
+-- Ende --
Index: trunk/import/norgis_alkis_pp/postcreate.de/views_buchungsketten.sql
===================================================================
--- trunk/import/norgis_alkis_pp/postcreate.de/views_buchungsketten.sql	(revision 396)
+++ trunk/import/norgis_alkis_pp/postcreate.de/views_buchungsketten.sql	(revision 396)
@@ -0,0 +1,298 @@
+
+-- ====================================================================================================
+--  ALKIS-PostGIS  FlurstÃŒcke Suchen, die eine Verkettung von mehreren Buchungsstellen haben
+-- ====================================================================================================
+
+-- Aufgaben:
+-- ---------
+-- FlurstÃŒcke ermitteln die 2 bis 4 (oder mehr?) Buchungsstellen haben die jeweils ein "Recht an" einer anderen Buchungsstelle haben.
+-- Beispiel:
+--   "Wohnungs-/Teiluntererbbaurecht" >an> "Aufgeteiltes Untererbbaurecht WEG" >an> "Erbbaurecht" >an> "GrundstÃŒck" >Buchung> FlurstÃŒck 
+-- In einem WMS diese besonderen Buchungen hervorheben.
+-- Die betroffenen Buchungsarten auflisten.
+-- Auch einige EinzelfÃ€lle selektieren.
+-- Dies dient zunÃ€chst dazu, um TestfÃ€lle fÃŒr die Weiterentwicklung der Buchauskunft zu finden (Entwicklung).
+-- Vielleicht hat auch ein Anwender Verwendung dafÃŒr.
+
+-- AusfÃŒhrung in:
+-- Step "postcreate.d" des ALKIS-Importers. Hier also nur Definitionen machen, keine Daten bearbeiten.
+
+--Stand 
+--  2017-12-07 Prototyp
+
+-- V i e w s
+-- =================================
+
+-- Views fÃŒr die Darstellung im WMS
+-- =================================
+
+-- 2 beteiligte Buchungsstellen
+-- "Erbbaurecht" und Ã€hnliches
+-- --------------------------
+-- FS >istGebucht> Buchungstelle 1  <an<  Buchungstelle 2
+-- --------------------------------------------------------------------
+   DROP VIEW IF EXISTS buchungsrechte_2arten;
+   DROP VIEW IF EXISTS buchungsrechte_2wms;
+CREATE OR REPLACE VIEW buchungsrechte_2wms
+AS
+ SELECT DISTINCT                    -- Ohne DISTINCT maherfache Ãberlagerung
+    f.gml_id,                       -- Unique Key
+    s2.buchungsart,                 -- verschlÃŒsselt (Nummer)
+    f.wkb_geometry
+ --, wb.v      AS bu_art            -- Buchungsart entschlÃŒsselt  -- Hier nicht!
+  FROM ax_flurstueck     f          -- FlurstÃŒck
+  JOIN ax_buchungsstelle s1         -- dienende Buchung
+    ON f.istgebucht = s1.gml_id
+  JOIN ax_buchungsstelle s2         -- herrschende Buchung
+    ON s1.gml_id = ANY(s2.an)       -- hat Recht an
+--JOIN alkis_wertearten wb          -- EntschlÃŒsseln "Buchungsart"
+--  ON cast(s2.buchungsart AS character varying) = wb.k 
+-- AND wb.element = 'ax_buchungsstelle' AND wb.bezeichnung = 'buchungsart' 
+  WHERE f.endet IS NULL AND s1.endet IS NULL AND s2.endet IS NULL;
+
+COMMENT ON VIEW buchungsrechte_2wms IS 'FÃŒr WMS-Anzeige von FlurstÃŒcken mit Buchungsarten mit 2 beteiligten Buchungsstellen, z.B. Erbbaurecht.';
+GRANT SELECT ON TABLE public.buchungsrechte_2wms  TO ms6;
+
+
+-- 3 beteiligte Buchungsstellen
+-- "Untererbbaurecht" und Ã€hnliches
+-- --------------------------------
+-- FS >istGebucht> Buchungstelle 1  <an<  Buchungstelle 2 <an<  Buchungstelle 3
+-- ------------------------------------------------------------------------------------------------------------------
+   DROP VIEW IF EXISTS buchungsrechte_3arten;
+   DROP VIEW IF EXISTS buchungsrechte_3wms;
+CREATE OR REPLACE VIEW buchungsrechte_3wms
+AS
+ SELECT DISTINCT f.gml_id, s3.buchungsart, f.wkb_geometry
+   FROM ax_flurstueck     f  
+   JOIN ax_buchungsstelle s1 ON f.istgebucht = s1.gml_id
+   JOIN ax_buchungsstelle s2 ON s1.gml_id = ANY(s2.an)    
+   JOIN ax_buchungsstelle s3 ON s2.gml_id = ANY(s3.an)  
+  WHERE f.endet IS NULL AND s1.endet IS NULL AND s2.endet IS NULL AND s3.endet IS NULL;
+
+COMMENT ON VIEW buchungsrechte_3wms IS 'FÃŒr WMS-Anzeige von FlurstÃŒcken mit Buchungsarten mit 3 beteiligten Buchungsstellen, z.B. Untererbbaurecht.';
+GRANT SELECT ON TABLE public.buchungsrechte_3wms  TO ms6;
+-- z.B. 69 FlurstÃŒcke in Lage in 312 msec.
+
+
+-- 4 beteiligte Buchungsstellen
+-- Teil-Untererbbaurecht
+-- --------------------------------
+-- FS >istGebucht> Buchungstelle 1  <an<  Buchungstelle 2 <an<  Buchungstelle 3 <an<  Buchungstelle 4
+-- ------------------------------------------------------------------------------------------------------------------
+   DROP VIEW IF EXISTS buchungsrechte_4arten;
+   DROP VIEW IF EXISTS buchungsrechte_4wms;
+CREATE OR REPLACE VIEW buchungsrechte_4wms
+AS
+ SELECT DISTINCT f.gml_id, s4.buchungsart, f.wkb_geometry
+  FROM ax_flurstueck     f  
+  JOIN ax_buchungsstelle s1 ON f.istgebucht = s1.gml_id
+  JOIN ax_buchungsstelle s2 ON s1.gml_id = ANY(s2.an)    
+  JOIN ax_buchungsstelle s3 ON s2.gml_id = ANY(s3.an) 
+  JOIN ax_buchungsstelle s4 ON s3.gml_id = ANY(s4.an)  
+ WHERE f.endet IS NULL AND s1.endet IS NULL AND s2.endet IS NULL AND s3.endet IS NULL AND s4.endet IS NULL;
+
+COMMENT ON VIEW buchungsrechte_4wms IS 'FÃŒr WMS-Anzeige von FlurstÃŒcken mit Buchungsarten mit 4 beteiligten Buchungsstellen.';
+GRANT SELECT ON TABLE public.buchungsrechte_4wms  TO ms6;
+-- 6 FlurstÃŒcke im Kreis Minden-LÃŒbbecke,
+-- 3 FlurstÃŒcke in Lage in 180 msec. ("DENW17AL0000VffJ" "DENW17AL0000VnuJ" "DENW17AL0000Vwe1")
+
+
+-- Gibts das?  Nein!
+-- --------------------------------
+-- FS >istGebucht> Buchungstelle 1  <an<  Buchungstelle 2 <an<  Buchungstelle 3 <an<  Buchungstelle 4 <an<  Buchungstelle 5
+-- ------------------------------------------------------------------------------------------------------------------
+-- 5 beteiligte Buchungsstellen
+-- DROP VIEW IF EXISTS buchungsrechte_5wms;
+/*
+CREATE OR REPLACE VIEW buchungsrechte_5wms
+AS
+ SELECT DISTINCT f.gml_id, s5.buchungsart, f.wkb_geometry
+   FROM ax_flurstueck     f  
+   JOIN ax_buchungsstelle s1  ON f.istgebucht = s1.gml_id
+   JOIN ax_buchungsstelle s2  ON s1.gml_id = ANY (s2.an)    
+   JOIN ax_buchungsstelle s3  ON s2.gml_id = ANY (s3.an) 
+   JOIN ax_buchungsstelle s4  ON s3.gml_id = ANY (s4.an)  
+   JOIN ax_buchungsstelle s5  ON s4.gml_id = ANY (s5.an)  
+  WHERE f.endet IS NULL AND s1.endet IS NULL AND s2.endet IS NULL AND s3.endet IS NULL AND s4.endet IS NULL AND s5.endet IS NULL;
+
+COMMENT ON VIEW buchungsrechte_5wms IS 'FÃŒr WMS-Anzeige von FlurstÃŒcken mit Buchungsarten mit 5 beteiligten Buchungsstellen.';
+GRANT SELECT ON TABLE public.buchungsrechte_5wms  TO ms6;
+*/
+
+-- Views fÃŒr die Modellierung der Classes im WMS
+-- =============================================
+-- Buchungsart entschlÃŒsseln. Die Treffer der WMS-Views weiter verdichten:
+
+CREATE OR REPLACE VIEW buchungsrechte_2arten AS
+ SELECT DISTINCT s.buchungsart, wb.v AS bu_art
+   FROM buchungsrechte_2wms s
+   JOIN alkis_wertearten wb -- EntschlÃŒsseln "Buchungsart"
+     ON cast(s.buchungsart AS character varying) = wb.k 
+    AND wb.element = 'ax_buchungsstelle' AND wb.bezeichnung = 'buchungsart' 
+  ORDER BY s.buchungsart; 
+COMMENT ON VIEW buchungsrechte_2arten IS 'Vorkommende Buchungsarten bei der Verkettung von 2 Buchungsstellen.';
+-- 1301;"Wohnungs-/Teileigentum"
+-- 1302;"Miteigentum Par. 3 Abs. 4 GBO"
+-- 2101;"Erbbaurecht"
+-- 2201;"Aufgeteiltes Erbbaurecht WEG"
+
+CREATE OR REPLACE VIEW buchungsrechte_3arten AS
+ SELECT DISTINCT s.buchungsart, wb.v AS bu_art
+   FROM buchungsrechte_3wms s
+   JOIN alkis_wertearten wb
+     ON cast(s.buchungsart AS character varying) = wb.k 
+    AND wb.element = 'ax_buchungsstelle' AND wb.bezeichnung = 'buchungsart' 
+  ORDER BY buchungsart; 
+COMMENT ON VIEW buchungsrechte_3arten IS 'Vorkommende Buchungsarten bei der Verkettung von 3 Buchungsstellen.';
+-- 2102;"Untererbbaurecht"
+-- 2202;"Aufgeteiltes Untererbbaurecht WEG"
+-- 2203;"Aufgeteiltes Recht Par. 3 Abs. 4 GBO"
+-- 2301;"Wohnungs-/Teilerbbaurecht"
+
+CREATE OR REPLACE VIEW buchungsrechte_4arten AS
+ SELECT DISTINCT s.buchungsart, wb.v AS bu_art
+   FROM buchungsrechte_4wms s
+   JOIN alkis_wertearten wb
+     ON cast(s.buchungsart AS character varying) = wb.k 
+    AND wb.element = 'ax_buchungsstelle' AND wb.bezeichnung = 'buchungsart' 
+  ORDER BY buchungsart; 
+COMMENT ON VIEW buchungsrechte_4arten IS 'Vorkommende Buchungsarten bei der Verkettung von 4 Buchungsstellen.';
+-- 2302;"Wohnungs-/Teiluntererbbaurecht"
+
+
+-- Views um EinzelfÃ€lle zu suchen und aufzulisten
+-- ==============================================
+
+CREATE OR REPLACE VIEW buchungsrechte_4faelle
+AS
+ SELECT 
+    f.gml_id, f.flurstueckskennzeichen,
+    s1.laufendenummer AS bvnr1, s1.buchungsart AS buchunsart_1, w1.v AS ba1, b1.buchungsblattnummermitbuchstabenerweiterung AS blatt1,
+    s2.laufendenummer AS bvnr2, s2.buchungsart AS buchunsart_2, w2.v AS ba2, b2.buchungsblattnummermitbuchstabenerweiterung AS blatt2,
+    s3.laufendenummer AS bvnr3, s3.buchungsart AS buchunsart_3, w3.v AS ba3, b3.buchungsblattnummermitbuchstabenerweiterung AS blatt3,
+    s4.laufendenummer AS bvnr4, s4.buchungsart AS buchunsart_4, w4.v AS ba4, b4.buchungsblattnummermitbuchstabenerweiterung AS blatt4
+
+  -- FlurstÃŒck
+  FROM ax_flurstueck     f  
+
+  -- 1. Buchung
+  JOIN ax_buchungsstelle s1 ON f.istgebucht = s1.gml_id
+  LEFT JOIN alkis_wertearten  w1 ON cast(s1.buchungsart AS character varying)=w1.k AND w1.element='ax_buchungsstelle' AND w1.bezeichnung='buchungsart' 
+  JOIN ax_buchungsblatt  b1 ON s1.istbestandteilvon = b1.gml_id
+
+  -- 2. Buchung
+  JOIN ax_buchungsstelle s2 ON s1.gml_id = ANY(s2.an)
+  LEFT JOIN alkis_wertearten  w2 ON cast(s2.buchungsart AS character varying)=w2.k AND w2.element='ax_buchungsstelle' AND w2.bezeichnung='buchungsart' 
+  JOIN ax_buchungsblatt  b2 ON s2.istbestandteilvon = b2.gml_id
+
+  -- 3. Buchung
+  JOIN ax_buchungsstelle s3 ON s2.gml_id = ANY(s3.an)
+  LEFT JOIN alkis_wertearten  w3 ON cast(s3.buchungsart AS character varying)=w3.k AND w3.element='ax_buchungsstelle' AND w3.bezeichnung='buchungsart' 
+  JOIN ax_buchungsblatt  b3 ON s3.istbestandteilvon = b3.gml_id
+
+  -- 4. Buchung
+  JOIN ax_buchungsstelle s4 ON s3.gml_id = ANY(s4.an)  
+  LEFT JOIN alkis_wertearten  w4 ON cast(s4.buchungsart AS character varying)=w4.k AND w4.element='ax_buchungsstelle' AND w4.bezeichnung='buchungsart' 
+  JOIN ax_buchungsblatt  b4 ON s4.istbestandteilvon = b4.gml_id
+
+ -- nur frische Sachen
+ WHERE f.endet  IS NULL 
+   AND s1.endet IS NULL AND b1.endet IS NULL 
+   AND s2.endet IS NULL AND b2.endet IS NULL 
+   AND s3.endet IS NULL AND b3.endet IS NULL 
+   AND s4.endet IS NULL AND b4.endet IS NULL 
+ LIMIT 20;
+
+COMMENT ON VIEW buchungsrechte_4faelle IS 'FÃŒr Buchungsarten mit 4 beteiligten Buchungsstellen die einzelnen Kennzeichen tabellarisch auflisten.';
+
+
+CREATE OR REPLACE VIEW buchungsrechte_3text 
+AS
+ SELECT 
+    a3.v || ' (' || b3.blattart || ') ' || b3.buchungsblattnummermitbuchstabenerweiterung || ' (lfd. ' || s3.laufendenummer || ') hat ' || w3.v || ' (' || s3.buchungsart || ') an ' AS stufe3,
+    a2.v || ' (' || b2.blattart || ') ' || b2.buchungsblattnummermitbuchstabenerweiterung || ' (lfd. ' || s2.laufendenummer || ') hat ' || w2.v || ' (' || s2.buchungsart || ') an ' AS stufe2,
+    a1.v || ' (' || b1.blattart || ') ' || b1.buchungsblattnummermitbuchstabenerweiterung || ' (lfd. ' || s1.laufendenummer || ') hat ' || w1.v || ' (' || s1.buchungsart || ') mit Buchung ' AS stufe1,
+    'FlurstÃŒck ' || f.flurstueckskennzeichen || ' (gml_id=' || f.gml_id || ')' AS flurstueck
+
+  -- FlurstÃŒck
+  FROM ax_flurstueck     f  
+
+  -- 1. Buchung
+  JOIN ax_buchungsstelle      s1 ON f.istgebucht = s1.gml_id
+  LEFT JOIN alkis_wertearten  w1 ON cast(s1.buchungsart AS character varying)=w1.k AND w1.element='ax_buchungsstelle' AND w1.bezeichnung='buchungsart' 
+  JOIN ax_buchungsblatt       b1 ON s1.istbestandteilvon = b1.gml_id
+  LEFT JOIN alkis_wertearten  a1 ON b1.blattart=a1.k AND a1.element='ax_buchungsblatt' AND a1.bezeichnung='blattart' 
+
+  -- 2. Buchung
+  JOIN ax_buchungsstelle      s2 ON s1.gml_id = ANY(s2.an)
+  LEFT JOIN alkis_wertearten  w2 ON cast(s2.buchungsart AS character varying)=w2.k AND w2.element='ax_buchungsstelle' AND w2.bezeichnung='buchungsart' 
+  JOIN ax_buchungsblatt       b2 ON s2.istbestandteilvon = b2.gml_id
+  LEFT JOIN alkis_wertearten  a2 ON b2.blattart=a2.k AND a2.element='ax_buchungsblatt' AND a2.bezeichnung='blattart' 
+
+  -- 3. Buchung
+  JOIN ax_buchungsstelle      s3 ON s2.gml_id = ANY(s3.an)
+  LEFT JOIN alkis_wertearten  w3 ON cast(s3.buchungsart AS character varying)=w3.k AND w3.element='ax_buchungsstelle' AND w3.bezeichnung='buchungsart' 
+  JOIN ax_buchungsblatt       b3 ON s3.istbestandteilvon = b3.gml_id
+  LEFT JOIN alkis_wertearten  a3 ON b3.blattart=a3.k AND a3.element='ax_buchungsblatt' AND a3.bezeichnung='blattart' 
+
+ -- nur frische Sachen
+ WHERE f.endet  IS NULL 
+   AND s1.endet IS NULL AND b1.endet IS NULL 
+   AND s2.endet IS NULL AND b2.endet IS NULL 
+   AND s3.endet IS NULL AND b3.endet IS NULL 
+ LIMIT 20;
+-- AusfÃŒhrung Stadt ca. 4 Sek.
+
+COMMENT ON VIEW buchungsrechte_3text IS 'FÃŒr Buchungsarten mit 3 beteiligten Buchungsstellen die einzelnen Kennzeichen als beschreibenden Text auflisten.';
+
+
+
+CREATE OR REPLACE VIEW buchungsrechte_4text 
+AS
+ SELECT 
+    a4.v || ' (' || b4.blattart || ') ' || b4.buchungsblattnummermitbuchstabenerweiterung || ' (lfd. ' || s4.laufendenummer || ') hat ' || w4.v || ' (' || s4.buchungsart || ') an ' AS stufe4,
+    a3.v || ' (' || b3.blattart || ') ' || b3.buchungsblattnummermitbuchstabenerweiterung || ' (lfd. ' || s3.laufendenummer || ') hat ' || w3.v || ' (' || s3.buchungsart || ') an ' AS stufe3,
+    a2.v || ' (' || b2.blattart || ') ' || b2.buchungsblattnummermitbuchstabenerweiterung || ' (lfd. ' || s2.laufendenummer || ') hat ' || w2.v || ' (' || s2.buchungsart || ') an ' AS stufe2,
+    a1.v || ' (' || b1.blattart || ') ' || b1.buchungsblattnummermitbuchstabenerweiterung || ' (lfd. ' || s1.laufendenummer || ') hat ' || w1.v || ' (' || s1.buchungsart || ') mit Buchung ' AS stufe1,
+    'FlurstÃŒck ' || f.flurstueckskennzeichen || ' (gml_id=' || f.gml_id || ')' AS flurstueck
+
+  -- FlurstÃŒck
+  FROM ax_flurstueck     f  
+
+  -- 1. Buchung
+  JOIN ax_buchungsstelle      s1 ON f.istgebucht = s1.gml_id
+  LEFT JOIN alkis_wertearten  w1 ON cast(s1.buchungsart AS character varying)=w1.k AND w1.element='ax_buchungsstelle' AND w1.bezeichnung='buchungsart' 
+  JOIN ax_buchungsblatt       b1 ON s1.istbestandteilvon = b1.gml_id
+  LEFT JOIN alkis_wertearten  a1 ON b1.blattart=a1.k AND a1.element='ax_buchungsblatt' AND a1.bezeichnung='blattart' 
+
+  -- 2. Buchung
+  JOIN ax_buchungsstelle      s2 ON s1.gml_id = ANY(s2.an)
+  LEFT JOIN alkis_wertearten  w2 ON cast(s2.buchungsart AS character varying)=w2.k AND w2.element='ax_buchungsstelle' AND w2.bezeichnung='buchungsart' 
+  JOIN ax_buchungsblatt       b2 ON s2.istbestandteilvon = b2.gml_id
+  LEFT JOIN alkis_wertearten  a2 ON b2.blattart=a2.k AND a2.element='ax_buchungsblatt' AND a2.bezeichnung='blattart' 
+
+  -- 3. Buchung
+  JOIN ax_buchungsstelle      s3 ON s2.gml_id = ANY(s3.an)
+  LEFT JOIN alkis_wertearten  w3 ON cast(s3.buchungsart AS character varying)=w3.k AND w3.element='ax_buchungsstelle' AND w3.bezeichnung='buchungsart' 
+  JOIN ax_buchungsblatt       b3 ON s3.istbestandteilvon = b3.gml_id
+  LEFT JOIN alkis_wertearten  a3 ON b3.blattart=a3.k AND a3.element='ax_buchungsblatt' AND a3.bezeichnung='blattart' 
+
+  -- 4. Buchung
+  JOIN ax_buchungsstelle      s4 ON s3.gml_id = ANY(s4.an)  
+  LEFT JOIN alkis_wertearten  w4 ON cast(s4.buchungsart AS character varying)=w4.k AND w4.element='ax_buchungsstelle' AND w4.bezeichnung='buchungsart' 
+  JOIN ax_buchungsblatt       b4 ON s4.istbestandteilvon = b4.gml_id
+  LEFT JOIN alkis_wertearten  a4 ON b4.blattart=a4.k AND a4.element='ax_buchungsblatt' AND a4.bezeichnung='blattart' 
+
+ -- nur frische Sachen
+ WHERE f.endet  IS NULL 
+   AND s1.endet IS NULL AND b1.endet IS NULL 
+   AND s2.endet IS NULL AND b2.endet IS NULL 
+   AND s3.endet IS NULL AND b3.endet IS NULL 
+   AND s4.endet IS NULL AND b4.endet IS NULL 
+ LIMIT 20;
+-- AusfÃŒhrung Stadt ca. 2 Minuten. Wieso so lange?
+
+COMMENT ON VIEW buchungsrechte_4text IS 'FÃŒr Buchungsarten mit 4 beteiligten Buchungsstellen die einzelnen Kennzeichen als beschreibenden Text auflisten.';
+
+-- Ende --
Index: trunk/import/norgis_alkis_pp/postcreate.de/x_classic2norgis.sql
===================================================================
--- trunk/import/norgis_alkis_pp/postcreate.de/x_classic2norgis.sql	(revision 395)
+++ 	(revision )
@@ -1,880 +1,0 @@
-
--- ===================================================================================
---  ALKIS-PostGIS   Mapbender-Navigation und Buchauskunft fÃŒr NorGIS-ALKIS-Importer
--- ===================================================================================
-
---Stand 
---  2016-02-23
---  2016-11-24 Index auf ax.person.nachnameoderfirma fÃŒr WMS Flurstuecke_kommunal
---  2016-12-01 exp_csv: Fehlerkorrektur bei EntschlÃŒsselung der Buchungsart
---             Optimierte Version (ohne Doppelverbindung)
---  2017-02-23 Spalte "fall" aus View "flst_an_strasse" im View "exp_csv_str" ausgeben.
---             Darauf basiert ein neuer Filter im Programm "alkisexport.php".
---			Sortierung FS-Kennz. repariert in Views "exp_csv" und "exp_csv_str"
-
--- ToDo: Auch den View "flst_an_strasse" mÃ¶glist nicht in andere Views einbinden.
---       DafÃŒr die gesamte Struktur als UNION-View.
-
--- Aufgabe:
---
--- Die ALKIS-Navigation fÃŒr Mapbender 2.7.4 arbeitet bisher mit der Datenbank-Struktur
--- aus dem "Klassischen" Import mit Aufruf des Konvertres ogr2ogr aus einen Shellscript.
---
--- Dabei wird ein PostProcessing (Nach-Konverter-Verarbeitung) durchgefÃŒhrt,
--- das Tabellen und Views bereit stellt, fÃŒr einen schnellen Zugriff in 
---  Mapfile, Auskunft und Navigation. 
---
--- Dies Script soll eine Datenbank, die mit dem NorGIS-ALKIS-Importer geladen wurde
--- fÃŒr die Verwendung mit ALKIS-Navigation und Buchauskunft vorbereiten. 
--- Es ist jedoch eine speziell angepasste Version der NAV-PHP-Scripte notwendig. 
-
--- Alternative: 
---  Die bisher auch in der NAV verwendeten Tabellen "pp_flur", "pp_gemarkung", "pp_gemeinde"
---  werden auch fÃŒr eine "Ãbersichtskarte" benÃ¶tigt (Gruppe "Gebiete" im Classic-Mapfile). 
---  Um diese zu bekommen mÃŒsste dieser Teil des klassischen Post-Processing auch in der 
---  NorGIS-Version ausgefÃŒhrt wÃŒrde.
---  Siehe Script: "pp_gebiete.sql" (FÃŒllen) und Teile von "pp_definition.sql" (DB-Struktur).
-
-
--- T e s t  /  A n a l y s e
--- ============================
-/*
-
--- ÃnderungswÃŒnsche an der norGIS-ALKIS-Importer Datenbankstruktur
--- -----------------------------------------------------------------
-
-1.
-In den ALKIS-Tabellen "ax_historischesflurstueck" und "ax_historischesflurstueckohneraumbezug" sollten
-die Spalten "zaehler" und "nenner" das Format Integer statt Character haben.
-Beim Anzeigen wird eine "numerische" Sortierung erwartet (aufsteigende FS-Nummer).
-Da die Spalten linksbÃŒndig ohne fÃŒhrende Nullen gefÃŒllt sind muss man bei jeder Abfrage eine 
-Typenumwandlung "cast(.. AS integer)" durchfÃŒhren um eine numerische Sortierung zu bekommen.
-
-2.
-In den PostProcessing-Tabellen "gem_shl" und "gema_shl" sollten die Spalten als "character varying"
-definiert sein und NICHT mit Leerzeichen aufgefÃŒllt werden.
-Derzeit muss man bei der Suche und Anzeige immer mit Subsring- und Trim-Funktionen arbeiten. 
-
-3.
-Die Gemarkungsnummer sollte einheitlich ohne vorangestelltes "Land" verwendet werden.
-In den ALKIS-Tabellen ist i.d.R. die Gemarkungsnummer 4stellig enthalten und land (2) in einem weiteren Feld.
-(ax_gemarkungsteilflur.gemarkung integer, ax_gemarkung.gemarkungsnummer character varying,
- ax_flurstueck.gemarkungsnummer character varying, usw. ..)
-In den Hilfstabellen wie "gema_shl.gemashl" wird Gemarkung aber 6stellig mit "land" davor gespeichert.
-Man muss in den Programmen dann mal das Land hinzufÃŒgen und mal abschneiden. 
-*/
-
-
--- D a t e n 
--- ============================
-
--- Die "Beziehungen" werden immer noch mit geladen, sind aber inzwischen ÃŒberflÃŒssig,
--- weil jetzt Relationen zwischen den Tabellen definiert sind. 
-  TRUNCATE alkis_beziehungen;
-
-
--- T a b e l l e n
--- ============================
-
--- "pp_gemeinde" ersetzen
--- ------------------------
--- "pp_gemeinde" ist eine optimierte Tabelle der Gemeinden aus dem Post-Processing der Classic-Variante.
--- In der NAV eErsetzen durch:
-
--- TABLE gem_shl (
---  gemshl character(32) NOT NULL,  -- GemeindeschlÃŒssel z.B. '05766040' = Lage
---                                     Achtung: hinten mit Leerzeichen aufgefÃŒllt!!
---  gemname character(100),         -- Name
-
-
--- "pp_gemarkung" ersetzen
--- ----------------------------
--- "pp_gemarkung" ist eine optimierte Tabelle der Gemarkungen aus dem Post-Processing der Classic-Variante.
--- In der NAV eErsetzen durch:
-
--- TABLE gema_shl (
---  gemashl character(6) NOT NULL,  -- GemarkungsschlÃŒssel z.B. '052005' = Lage
---  gemarkung character(50),        -- Name
---  gemshl character(30),           -- GemeindeschlÃŒssel z.B. '05766040' = Lage  oder leer
---                                     Achtung: hinten mit Leerzeichen aufgefÃŒllt!!
---  ag_shl character(4),            -- ?? leer
-
-
--- "pp_flur" ersetzen
--- -------------------
--- "pp_flur" ist eine optimierte Tabelle der Katasterfluren aus dem Post-Processing der Classic-Variante.
--- In der NAV eErsetzen durch:
-
--- TABLE ax_gemarkungsteilflur (
---  gml_id character(16) NOT NULL, -- Identifikator, global eindeutig
---  endet character(20),
---  schluesselgesamt character varying, -- (DER) SCH[CharacterString] 'SchlÃŒssel (gesamt)'   LLGGGFFF  Land-Gemerkung-Flur
---  bezeichnung character varying, -- BEZ[CharacterString] 'Bezeichnung'  FFF  FLurnummer mit fÃŒhrenden Nullen
---  land character varying, -- LAN[CharacterString] Bundesland. LL '05'
---  gemarkung integer, -- GMN[CharacterString] Gemarkung.  GGGG 
---  gemarkungsteilflur integer, -- FLR[CharacterString] Gemarkungsteil bzw. Flur.
-
-
--- Tabelle "gemeinde_person" ersetzen
--- -----------------------------------
---
-
-
--- I n d i c e s
--- ============================
-
--- Tabelle "ax_gemarkungsteilflur" sollte Such-Index erhalten auf "gemarkung".
--- FÃŒr Auflistung aller Fluren zur Gemarkung in Script "alkisnav_fls", Function "EineGemarkung".
-
-
--- Der WMS "Flurstuecke_Kommunal" (aus View "st_flurst[gkz]") wird langsam, 
---  wenn er in einer kreisweiten Datenbank ausgefÃŒhrt wird.
--- Das Filter-Feld benÃ¶tigt einen Index:
-DROP INDEX if exists ax_person_nname;
-CREATE INDEX ax_person_nname
-  ON ax_person USING btree (nachnameoderfirma COLLATE pg_catalog."default");
-
-
--- V i e w s
--- ============================
-
-
--- Bausteine fÃŒr andere Views:
--- ---------------------------
-
--- Ein View, der die Verbindung von FlurstÃŒck zur Buchung fÃŒr zwei verschiedene FÃ€lle herstellt.
--- Einmal die "normalen" (direkten) Buchungen.
--- Zweitens ÃŒber die Rechte von Buchungsstellen an anderen Buchungsstellen.
--- Dies kann als "MittelstÃŒck" in den anderen Views eingefÃŒgt werden.
-
--- Einfach/Direkt:
---   FlurstÃŒck   >istGebucht>                         (Buchungs-Stelle)
---
--- Mit "Recht an":
---   FlurstÃŒck   >istGebucht>  Buchungs-Stelle  <an<  (Buchungs-Stelle)
---                               (dienend)              (herrschend) 
-
--- Stand 2016-12-01:
---	Dieser View "doppelverbindung", eingebettet in andere Views, hat sich bei der AusfÃŒhrungszeit
---	als nicht optimal heraus gestellt.
---	Der Ã€uÃere "View" sieht einfacher aus und ist besser zu verstehen.
---	Wenn man den ganzen Ã€uÃeren View als UNION formuliert, dann ist das zwar viel mehr Code.
---	Die AusfÃŒhrungszeit ist aber deutlich kÃŒrzer.
-
---           DROP VIEW public.doppelverbindung;
-CREATE OR REPLACE VIEW public.doppelverbindung
-AS
-  -- FS >istGebucht> Buchungstelle
-  SELECT f1.gml_id              AS fsgml,    -- gml_id FlurstÃŒck
-         b1.gml_id              AS bsgml,    -- gml_id Buchungs
-         0                      AS ba_dien
-    FROM ax_flurstueck f1
-    JOIN ax_buchungsstelle b1   ON f1.istgebucht = b1.gml_id
- UNION
-  -- FS >istGebucht> Buchungstelle  <an<  Buchungstelle
-  SELECT f2.gml_id              AS fsgml,    -- gml_id FlurstÃŒck
-         b2.gml_id              AS bsgml,    -- gml_id Buchung - (herrschendes GB)
-         dien.buchungsart       AS ba_dien   -- Ein Feld aus der Zwischen-Buchung zur Fall-Unterscheidung
-    FROM ax_flurstueck f2
-    JOIN ax_buchungsstelle dien ON f2.istgebucht = dien.gml_id
-    JOIN ax_buchungsstelle b2   ON dien.gml_id = ANY (b2.an)  -- auch "zu" ?
-   WHERE dien.endet IS NULL;   -- FÃŒr das zusÃ€tzliche Verbindungselement die Historie HIER ausschlieÃen, 
-                               -- FÃŒr andere Tabellen muss dies in dem View erfolgen, der dies verwendet.
-
-COMMENT ON VIEW public.doppelverbindung 
- 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.
-Dies ist ausschlieÃlich gedacht zur Verwendung in anderen Views um diese einfacher zu machen.';
-
-
--- Ein View, der die Verbindung von FlurstÃŒck zur StraÃentabelle fÃŒr zwei verschiedene FÃ€lle herstellt.
--- Einmal ÃŒber die Lagebezeichnung MIT Hausnummer und einmal OHNE.
--- Dies kann als "MittelstÃŒck" in den anderen Views eingefÃŒgt werden.
-
---           DROP VIEW public.flst_an_strasse;
-CREATE OR REPLACE VIEW public.flst_an_strasse
-AS
-  -- FlurstÃŒck >weistAuf> ax_lagebezeichnungMIThausnummer <JOIN> ax_lagebezeichnungkatalogeintrag
-  SELECT fm.gml_id AS fsgml,
-         sm.gml_id AS stgml,                 -- Filter: gml_id der StraÃe
-         'm' AS fall                         -- SÃ€tze unterschieden: Mit HsNr
-    FROM ax_flurstueck fm                    -- FlurstÃŒck Mit
-    JOIN ax_lagebezeichnungmithausnummer lm  -- Lage MIT
-      ON lm.gml_id = ANY (fm.weistauf)
-    JOIN ax_lagebezeichnungkatalogeintrag sm
-      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 
-   WHERE lm.endet IS NULL AND fm.endet IS NULL -- nichts Historisches
- UNION
-  -- FlurstÃŒck >zeigtAuf> ax_lagebezeichnungOHNEhausnummer <JOIN> ax_lagebezeichnungkatalogeintrag
-  SELECT fo.gml_id AS fsgml,
-         so.gml_id AS stgml,                 -- Filter: gml_id der StraÃe
-         'o' AS fall                         -- SÃ€tze unterschieden: Ohne HsNr
-    FROM ax_flurstueck fo                    -- FlurstÃŒck OHNE
-    JOIN ax_lagebezeichnungohnehausnummer lo -- Lage OHNE
-      ON lo.gml_id = ANY (fo.zeigtauf)
-    JOIN ax_lagebezeichnungkatalogeintrag so -- StraÃe OHNE
-      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
-   WHERE lo.endet IS NULL AND fo.endet IS NULL; -- nichts Historisches
-
-COMMENT ON VIEW public.flst_an_strasse 
- IS 'ALKIS-Beziehung von FlurstÃŒck zu StraÃentabelle. UNION-Zusammenfassung der FÃ€lle MIT und OHNE Hausnummer.';
-
--- Muss man noch dafÃŒr sorgen, dass FlurstÃŒck nicht doppelt vorkommt? z.B. mit DISTINCT
--- Oder mÃŒssen ggf. mehrfache FS im Programm ÃŒbersprungen werden?
-
-
--- Generelle Export-Struktur "FlurstÃŒck - Buchung - Grundbuch - Person"
--- --------------------------------------------------------------------
--- Wird benÃ¶tigt im Auskunft-Modul "alkisexport.php":
--- Je nach aufrufendem Modul wird der Filter (WHERE) an anderer Stelle gesetzt (gml_id von FS, GB oder Pers.)
--- FÃŒr Filter nach "StraÃe" siehe die nachfolgende Sonderversion "exp_csv_str".
-
--- Problem / Konflikt:
--- Es kann nur eine lineare Struktur aus Spalten und Zeilen exportiert werden. 
--- Wenn nicht nur die Daten des Ausgangs-Objektes exportiert werden, sondern auch verbundene Tabellen in 
--- einer 1:N-Struktur, dann verdoppeln sich Zeileninhalte und es werden redundante Daten erzeugt. 
--- Diese Redundanzen mÃŒssen vom dem Programm gefiltert werden, das die Daten ÃŒber eine Schnittstelle einliest.
--- Anwendungs-Beispiel: Abrechnung von AnliegerbeitrÃ€gen.
-
-/*
-DROP VIEW IF EXISTS exp_csv_alt;
-CREATE OR REPLACE VIEW exp_csv_alt
-AS
- SELECT
-  -- F l u r s t ÃŒ c k
-    f.gml_id                             AS fsgml,       -- mÃ¶glicher Filter FlurstÃŒcks-GML-ID
-    f.flurstueckskennzeichen             AS fs_kennz,
-    f.gemarkungsnummer,                                  -- Teile des FS-Kennz. noch mal einzeln
-    f.flurnummer, f.zaehler, f.nenner, 
-    f.amtlicheflaeche                    AS fs_flae,
-    g.bezeichnung                        AS gemarkung,
-  -- G r u n d b u c h
-    gb.gml_id                            AS gbgml,       -- mÃ¶glicher Filter Grundbuch-GML-ID
-    gb.bezirk                            AS gb_bezirk,
-    gb.buchungsblattnummermitbuchstabenerweiterung AS gb_blatt,
-    z.bezeichnung                        AS beznam,      -- GB-Bezirks-Name
-  -- B u c h u n g s s t e l l e  (GrundstÃŒck)
-    s.laufendenummer                     AS bu_lfd,      -- BVNR
-  --s.zaehler, s.nenner,                                 -- Anteil des GB am FS, einzelne Felder
-    '=' || s.zaehler || '/' || s.nenner  AS bu_ant,      -- als Excel-Formel (nur bei Wohnungsgrundbuch JOIN ÃŒber 'Recht an')
-    s.buchungsart,                                       -- verschlÃŒsselt
-  --b.bezeichner                         AS bu_art,      -- Buchungsart entschlÃŒsselt
-    wb.v                                 AS bu_art,      -- Buchungsart entschlÃŒsselt
-  -- N a m e n s N u m m e r  (Normalfall mit Person)
-    nn.laufendenummernachdin1421         AS nam_lfd, 
-    '=' || nn.zaehler|| '/' || nn.nenner AS nam_ant,         -- als Excel-Formel
-  -- 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)
-  -- Aus Subquery rg
-    rg.artderrechtsgemeinschaft          AS nam_adr,
-    rg.v                                 AS nam_adrv,        -- Art der Rechtsgem. - Value zum Key
-    rg.beschriebderrechtsgemeinschaft    AS nam_bes,
-  -- P e r s o n
-    p.gml_id                             AS psgml,           -- mÃ¶glicher Filter Personen-GML-ID
-    p.anrede,                                                -- Anrede key
-    wp.v                                 AS anrv,            -- Anrede Value zum Key
-    p.vorname,
-    p.namensbestandteil,
-    p.nachnameoderfirma,                                     -- Familienname
-    p.geburtsdatum,
-    --p.geburtsname, p.akademischergrad 
-   -- A d r e s s e  der Person
-    a.postleitzahlpostzustellung         AS plz,
-    a.ort_post                           AS ort,             -- Anschreifenzeile 1: PLZ+Ort
-    a.strasse,  a.hausnummer,                                -- Anschriftenzeile 2: StraÃe+HsNr
-    a.bestimmungsland                    AS land
-  FROM ax_flurstueck    f               -- FlurstÃŒck
-  JOIN doppelverbindung d               -- beide FÃ€lle ÃŒber Union-View: direkt und ÃŒber Recht von Buchung an Buchung
-    ON d.fsgml = f.gml_id
-  JOIN ax_gemarkung g                   -- entschlÃŒsseln
-    ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer 
-  JOIN ax_buchungsstelle s              -- Buchungs-Stelle
-    ON d.bsgml = s.gml_id
-  JOIN ax_buchungsblatt  gb             -- Buchung >istBestandteilVon> Grundbuchblatt
-    ON gb.gml_id = s.istbestandteilvon
-  JOIN ax_buchungsblattbezirk z 
-    ON gb.land=z.land AND gb.bezirk=z.bezirk 
-  JOIN ax_namensnummer nn               -- Blatt <istBestandteilVon< NamNum
-    ON gb.gml_id = nn.istbestandteilvon
-  JOIN ax_person p                      -- NamNum >benennt> Person 
-    ON p.gml_id = nn.benennt
-  LEFT JOIN ax_anschrift a 
-    ON a.gml_id = ANY (p.hat)
-  -- E n t s c h l ÃŒ s s e l n:
-  LEFT JOIN alkis_wertearten wp         -- EntschlÃŒsseln "Person - Anrede"
-    ON cast(p.anrede AS character varying)=wp.k AND wp.element='ax_person' AND wp.bezeichnung='anrede' 
-  LEFT JOIN alkis_wertearten wb         -- EntschlÃŒsseln "Buchungsart"
-    ON cast(s.buchungsart AS character varying) = wb.k 
-   AND wb.element = 'ax_buchungsstelle' 
-   AND wb.bezeichnung = 'buchungsart' 
-  -- 2mal "LEFT JOIN" verdoppelt die Zeile in der Ausgabe. Darum als Subquery in Spalten packen:
-  -- Noch mal "GB -> NamNum", aber dieses Mal fÃŒr "Rechtsgemeinschaft".
-  -- Kommt max. 1 mal je GB vor und hat keine Relation auf Person.
-  LEFT JOIN
-   ( SELECT gr.gml_id, r.artderrechtsgemeinschaft, r.beschriebderrechtsgemeinschaft, wr.v
-       FROM ax_namensnummer r 
-       JOIN ax_buchungsblatt gr
-         ON r.istbestandteilvon = gr.gml_id -- Blatt <istBestandteilVon< NamNum (Rechtsgemeinschaft) 
-      LEFT JOIN alkis_wertearten wr
-        ON cast(r.artderrechtsgemeinschaft AS character varying)=wr.k AND wr.element='ax_namensnummer' AND wr.bezeichnung='artderrechtsgemeinschaft' 
-      WHERE NOT r.artderrechtsgemeinschaft IS NULL ) AS rg -- Rechtsgemeinschaft
-   ON rg.gml_id = gb.gml_id  -- zum GB
-  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
-  ORDER BY f.flurstueckskennzeichen, 
-           gb.bezirk, gb.buchungsblattnummermitbuchstabenerweiterung, s.laufendenummer,
-           nn.laufendenummernachdin1421;
-
-COMMENT ON VIEW exp_csv_alt 
- 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.
-ALTE VERSION unter Verwendung von "doppelverbindung". Zu langsam!!';
-*/
-
--- OPTIMIERUNG 2016-11-30:
--- Eine Variante, die ohne "doppelverbindung" auskommt. Das ist optimaler (schneller, Faktor 50!).
--- Das in "doppelverbindung" enthaltene UNION auf die gesamte Struktur anwenden.
--- Verbindungs-Tabellen zwischen "doppelverbindung" und den benachbarten Tabellen sind nur einmal enthalten.
-DROP VIEW IF EXISTS exp_csv;
-
-CREATE OR REPLACE VIEW exp_csv
-AS
- SELECT
-  -- F l u r s t ÃŒ c k
-    f.gml_id                             AS fsgml,       -- mÃ¶glicher Filter FlurstÃŒcks-GML-ID
-    f.flurstueckskennzeichen             AS fs_kennz,
-    f.gemarkungsnummer,                                  -- Teile des FS-Kennz. noch mal einzeln
-    f.flurnummer, f.zaehler, f.nenner, 
-    f.amtlicheflaeche                    AS fs_flae,
-    g.bezeichnung                        AS gemarkung,
-  -- G r u n d b u c h
-    gb.gml_id                            AS gbgml,       -- mÃ¶glicher Filter Grundbuch-GML-ID
-    gb.bezirk                            AS gb_bezirk,
-    gb.buchungsblattnummermitbuchstabenerweiterung AS gb_blatt,
-    z.bezeichnung                        AS beznam,      -- GB-Bezirks-Name
-  -- B u c h u n g s s t e l l e  (GrundstÃŒck)
-    s.laufendenummer                     AS bu_lfd,      -- BVNR
-    '=' || s.zaehler || '/' || s.nenner  AS bu_ant,      -- als Excel-Formel (nur bei Wohnungsgrundbuch JOIN ÃŒber 'Recht an')
-    s.buchungsart,                                       -- verschlÃŒsselt
-    wb.v                                 AS bu_art,      -- Buchungsart entschlÃŒsselt
-  -- N a m e n s N u m m e r  (Normalfall mit Person)
-    nn.laufendenummernachdin1421         AS nam_lfd, 
-    '=' || nn.zaehler|| '/' || nn.nenner AS nam_ant,     -- als Excel-Formel
-  -- 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)
-    rg.artderrechtsgemeinschaft          AS nam_adr,
-    rg.v                                 AS nam_adrv,    -- Art der Rechtsgem. - Value zum Key
-    rg.beschriebderrechtsgemeinschaft    AS nam_bes,
-  -- P e r s o n
-    p.gml_id                             AS psgml,       -- mÃ¶glicher Filter Personen-GML-ID
-    p.anrede,                                            -- Anrede key
-    wp.v                                 AS anrv,        -- Anrede Value zum Key
-    p.vorname,
-    p.namensbestandteil,
-    p.nachnameoderfirma,                                 -- Familienname
-    p.geburtsdatum,
-  -- A d r e s s e  der Person
-    a.postleitzahlpostzustellung         AS plz,
-    a.ort_post                           AS ort,         -- Anschreifenzeile 1: PLZ+Ort
-    a.strasse,  a.hausnummer,                            -- Anschriftenzeile 2: StraÃe+HsNr
-    a.bestimmungsland                    AS land
-  FROM ax_flurstueck    f               -- FlurstÃŒck
-  JOIN ax_gemarkung g                   -- entschlÃŒsseln
-    ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer 
-  JOIN ax_buchungsstelle s              -- FS >istGebucht> Buchungstelle
-    ON f.istgebucht = s.gml_id
-  JOIN ax_buchungsblatt  gb             -- Buchung >istBestandteilVon> Grundbuchblatt
-    ON gb.gml_id = s.istbestandteilvon
-  JOIN ax_buchungsblattbezirk z 
-    ON gb.land=z.land AND gb.bezirk=z.bezirk 
-  JOIN ax_namensnummer nn               -- Blatt <istBestandteilVon< NamNum
-    ON gb.gml_id = nn.istbestandteilvon
-  JOIN ax_person p                      -- NamNum >benennt> Person 
-    ON p.gml_id = nn.benennt
-  LEFT JOIN ax_anschrift a 
-    ON a.gml_id = ANY (p.hat)
-  -- E n t s c h l ÃŒ s s e l n:
-  LEFT JOIN alkis_wertearten wp         -- EntschlÃŒsseln "Person - Anrede"
-    ON cast(p.anrede AS character varying) = wp.k 
-   AND wp.element = 'ax_person' 
-   AND wp.bezeichnung = 'anrede' 
-  LEFT JOIN alkis_wertearten wb         -- EntschlÃŒsseln "Buchungsart"
-    ON cast(s.buchungsart AS character varying) = wb.k
- -- buchungsart = integer / .k  = char 4stellig
-   AND wb.element = 'ax_buchungsstelle'
-   AND wb.bezeichnung = 'buchungsart' 
-  -- 2mal "LEFT JOIN" verdoppelt die Zeile in der Ausgabe. Darum als Subquery in Spalten packen:
-  -- Noch mal "GB -> NamNum", aber dieses Mal fÃŒr "Rechtsgemeinschaft".
-  -- Kommt max. 1 mal je GB vor und hat keine Relation auf Person.
-  LEFT JOIN
-   ( SELECT gr.gml_id, r.artderrechtsgemeinschaft, r.beschriebderrechtsgemeinschaft, wr.v
-       FROM ax_namensnummer r 
-       JOIN ax_buchungsblatt gr
-         ON r.istbestandteilvon = gr.gml_id -- Blatt <istBestandteilVon< NamNum (Rechtsgemeinschaft) 
-      LEFT JOIN alkis_wertearten wr
-        ON cast(r.artderrechtsgemeinschaft AS character varying)=wr.k AND wr.element='ax_namensnummer' AND wr.bezeichnung='artderrechtsgemeinschaft' 
-      WHERE NOT r.artderrechtsgemeinschaft IS NULL ) AS rg -- Rechtsgemeinschaft
-   ON rg.gml_id = gb.gml_id  -- zum GB
-  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
-UNION
- SELECT
-  -- F l u r s t ÃŒ c k
-    f.gml_id                             AS fsgml,       -- mÃ¶glicher Filter FlurstÃŒcks-GML-ID
-    f.flurstueckskennzeichen             AS fs_kennz,
-    f.gemarkungsnummer,                                  -- Teile des FS-Kennz. noch mal einzeln
-    f.flurnummer, f.zaehler, f.nenner, 
-    f.amtlicheflaeche                    AS fs_flae,
-    g.bezeichnung                        AS gemarkung,
-  -- G r u n d b u c h
-    gb.gml_id                            AS gbgml,       -- mÃ¶glicher Filter Grundbuch-GML-ID
-    gb.bezirk                            AS gb_bezirk,
-    gb.buchungsblattnummermitbuchstabenerweiterung AS gb_blatt,
-    z.bezeichnung                        AS beznam,      -- GB-Bezirks-Name
-  -- B u c h u n g s s t e l l e  (GrundstÃŒck)
-    s.laufendenummer                     AS bu_lfd,      -- BVNR
-    '=' || s.zaehler || '/' || s.nenner  AS bu_ant,      -- als Excel-Formel (nur bei Wohnungsgrundbuch JOIN ÃŒber 'Recht an')
-    s.buchungsart,                                       -- verschlÃŒsselt
-    wb.v                                 AS bu_art,      -- Buchungsart entschlÃŒsselt
-  -- N a m e n s N u m m e r  (Normalfall mit Person)
-    nn.laufendenummernachdin1421         AS nam_lfd, 
-    '=' || nn.zaehler|| '/' || nn.nenner AS nam_ant,     -- als Excel-Formel
-  -- 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)
-    rg.artderrechtsgemeinschaft          AS nam_adr,
-    rg.v                                 AS nam_adrv,    -- Art der Rechtsgem. - Value zum Key
-    rg.beschriebderrechtsgemeinschaft    AS nam_bes,
-  -- P e r s o n
-    p.gml_id                             AS psgml,       -- mÃ¶glicher Filter Personen-GML-ID
-    p.anrede,                                            -- Anrede key
-    wp.v                                 AS anrv,        -- Anrede Value zum Key
-    p.vorname,
-    p.namensbestandteil,
-    p.nachnameoderfirma,                                 -- Familienname
-    p.geburtsdatum,
-   -- A d r e s s e  der Person
-    a.postleitzahlpostzustellung         AS plz,
-    a.ort_post                           AS ort,         -- Anschreifenzeile 1: PLZ+Ort
-    a.strasse,  a.hausnummer,                            -- Anschriftenzeile 2: StraÃe+HsNr
-    a.bestimmungsland                    AS land
-  FROM ax_flurstueck f                  -- FlurstÃŒck
-  JOIN ax_gemarkung g                   -- entschlÃŒsseln
-    ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer 
-  -- FS >istGebucht> Buchungstelle  <an<  Buchungstelle
- -- Variante mit 2 Buchungs-Stellen (Recht An)
-  JOIN ax_buchungsstelle dien           -- dienende Buchung
-    ON f.istgebucht = dien.gml_id
-  JOIN ax_buchungsstelle s              -- herrschende Buchung
-    ON dien.gml_id = ANY (s.an)         -- hat Recht an
-  JOIN ax_buchungsblatt  gb             -- Buchung >istBestandteilVon> Grundbuchblatt
-    ON gb.gml_id = s.istbestandteilvon
-  JOIN ax_buchungsblattbezirk z 
-    ON gb.land=z.land AND gb.bezirk=z.bezirk 
-  JOIN ax_namensnummer nn               -- Blatt <istBestandteilVon< NamNum
-    ON gb.gml_id = nn.istbestandteilvon
-  JOIN ax_person p                      -- NamNum >benennt> Person 
-    ON p.gml_id = nn.benennt
-  LEFT JOIN ax_anschrift a 
-    ON a.gml_id = ANY (p.hat)
-  -- E n t s c h l ÃŒ s s e l n:
-  LEFT JOIN alkis_wertearten wp         -- EntschlÃŒsseln "Person - Anrede"
-    ON cast(p.anrede AS character varying)=wp.k AND wp.element='ax_person' AND wp.bezeichnung='anrede' 
-  LEFT JOIN alkis_wertearten wb         -- EntschlÃŒsseln "Buchungsart"
-    ON cast(s.buchungsart AS character varying) = wb.k 
-   AND wb.element = 'ax_buchungsstelle' 
-   AND wb.bezeichnung = 'buchungsart' 
-  LEFT JOIN
-   ( SELECT gr.gml_id, r.artderrechtsgemeinschaft, r.beschriebderrechtsgemeinschaft, wr.v
-       FROM ax_namensnummer r 
-       JOIN ax_buchungsblatt gr
-         ON r.istbestandteilvon = gr.gml_id -- Blatt <istBestandteilVon< NamNum (Rechtsgemeinschaft) 
-      LEFT JOIN alkis_wertearten wr
-        ON cast(r.artderrechtsgemeinschaft AS character varying)=wr.k AND wr.element='ax_namensnummer' AND wr.bezeichnung='artderrechtsgemeinschaft' 
-      WHERE NOT r.artderrechtsgemeinschaft IS NULL ) AS rg -- Rechtsgemeinschaft
-   ON rg.gml_id = gb.gml_id  -- zum GB
-  WHERE f.endet IS NULL AND s.endet IS NULL and gb.endet IS NULL and nn.endet IS NULL AND p.endet IS NULL
-    AND dien.endet IS NULL
-
-ORDER BY fs_kennz,   -- f.flurstueckskennzeichen, 
-      -- fsgml,      
-         gb_bezirk,  -- gb.bezirk, 
-         gb_blatt,   -- gb.buchungsblattnummermitbuchstabenerweiterung,
-         bu_lfd,     -- s.laufendenummer,
-         nam_lfd;    -- nn.laufendenummernachdin1421
-
-COMMENT ON VIEW exp_csv 
- 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.';
-
-
--- Eine Variante des View "exp_csv":
--- Hier wird zusÃ€tzlich der Baustein "flst_an_strasse" verwendet.
--- Der Filter "WHERE stgml= " auf die "gml_id" von "ax_lagebezeichnungkatalogeintrag" sollte gesetzt werden
--- um alle FlurstÃŒcke zu bekommen, die an einer StraÃe liegen.
-
-/*
-DROP VIEW IF EXISTS exp_csv_str_alt;
-CREATE OR REPLACE VIEW exp_csv_str_alt
-AS
- SELECT
-    l.stgml,                                             -- Filter: gml_id aus "ax_lagebezeichnungkatalogeintrag"
-                                                         -- UNTERSCHIED zu exp_csv)
-  -- F l u r s t ÃŒ c k
-    f.gml_id                             AS fsgml,       -- Gruppenwechsel fÃŒr "function lage_zum_fs" in alkisexport.php
-    f.flurstueckskennzeichen             AS fs_kennz,
-    f.gemarkungsnummer,                                  -- Teile des FS-Kennz. noch mal einzeln
-    f.flurnummer, f.zaehler, f.nenner, 
-    f.amtlicheflaeche                    AS fs_flae,
-    g.bezeichnung                        AS gemarkung,
-  -- G r u n d b u c h
-  --gb.gml_id                            AS gbgml,       -- mÃ¶glicher Filter Grundbuch-GML-ID
-    gb.bezirk                            AS gb_bezirk,
-    gb.buchungsblattnummermitbuchstabenerweiterung AS gb_blatt,
-    z.bezeichnung                        AS beznam,      -- GB-Bezirks-Name
-  -- B u c h u n g s s t e l l e  (GrundstÃŒck)
-    s.laufendenummer                     AS bu_lfd,      -- BVNR
-  --s.zaehler, s.nenner,                                 -- Anteil des GB am FS, einzelne Felder
-    '=' || s.zaehler || '/' || s.nenner  AS bu_ant,      -- als Excel-Formel (nur bei Wohnungsgrundbuch JOIN ÃŒber 'Recht an')
-    s.buchungsart,                                       -- verschlÃŒsselt
-    wb.v                                 AS bu_art,      -- Buchungsart entschlÃŒsselt
-  -- N a m e n s N u m m e r (Normalfall mit Person)
-    nn.laufendenummernachdin1421         AS nam_lfd, 
-    '=' || nn.zaehler|| '/' || nn.nenner AS nam_ant,         -- als Excel-Formel
-  -- 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)
-  -- Aus Subquery rg
-    rg.artderrechtsgemeinschaft          AS nam_adr,
-    rg.v                                 AS nam_adrv,        -- Art der Rechtsgem. - Value zum Key
-    rg.beschriebderrechtsgemeinschaft    AS nam_bes,
-  -- P e r s o n
-  --p.gml_id                             AS psgml,           -- mÃ¶glicher Filter Personen-GML-ID
-    p.anrede,                                                -- Anrede key
-    wp.v                                 AS anrv,            -- Anrede Value zum Key
-    p.vorname,
-    p.namensbestandteil,
-    p.nachnameoderfirma,                                     -- Familienname
-    p.geburtsdatum,
-    --p.geburtsname, p.akademischergrad 
-   -- A d r e s s e  der Person
-    a.postleitzahlpostzustellung         AS plz,
-    a.ort_post                           AS ort,             -- Anschriftenzeile 1: PLZ+Ort
-    a.strasse,  a.hausnummer,                                -- Anschriftenzeile 2: StraÃe+HsNr
-    a.bestimmungsland                    AS land
-  FROM ax_flurstueck    f               -- FlurstÃŒck
-  JOIN flst_an_strasse  l               -- Lage (hier zusÃ€tzlicher JOIN gegenÃŒber Version "exp_csv") 
-	ON l.fsgml = f.gml_id 
-  JOIN doppelverbindung d               -- beide FÃ€lle ÃŒber Union-View: direkt und ÃŒber Recht von Buchung an Buchung
-    ON d.fsgml = f.gml_id 
-  JOIN ax_gemarkung g                   -- entschlÃŒsseln
-    ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer 
-  JOIN ax_buchungsstelle s              -- Buchungs-Stelle
-    ON d.bsgml = s.gml_id 
-  JOIN ax_buchungsblatt  gb             -- Buchung >istBestandteilVon> Grundbuchblatt
-    ON gb.gml_id = s.istbestandteilvon
-  JOIN ax_buchungsblattbezirk z 
-    ON gb.land=z.land AND gb.bezirk=z.bezirk 
-  JOIN ax_namensnummer nn               -- Blatt <istBestandteilVon< NamNum
-    ON gb.gml_id = nn.istbestandteilvon
-  JOIN ax_person p                      -- NamNum >benennt> Person 
-    ON p.gml_id = nn.benennt
-  LEFT JOIN ax_anschrift a 
-    ON a.gml_id = ANY (p.hat)
-  -- E n t s c h l ÃŒ s s e l n:
-  LEFT JOIN alkis_wertearten wp         -- EntschlÃŒsseln "Person - Anrede"
-    ON cast(p.anrede AS character varying)=wp.k AND wp.element='ax_person' AND wp.bezeichnung='anrede' 
-  LEFT JOIN alkis_wertearten wb         -- EntschlÃŒsseln "Buchungsart"
-    ON cast(s.buchungsart AS character varying)=wb.k AND wp.element='ax_buchungsstelle' AND wp.bezeichnung='buchungsart' 
-  -- 2mal "LEFT JOIN" verdoppelt die Zeile in der Ausgabe. Darum als Subquery in Spalten packen:
-  -- Noch mal "GB -> NamNum", aber dieses Mal fÃŒr "Rechtsgemeinschaft".
-  -- Kommt max. 1 mal je GB vor und hat keine Relation auf Person.
-  LEFT JOIN
-   ( SELECT gr.gml_id, r.artderrechtsgemeinschaft, r.beschriebderrechtsgemeinschaft, wr.v
-       FROM ax_namensnummer r 
-       JOIN ax_buchungsblatt gr
-         ON r.istbestandteilvon = gr.gml_id -- Blatt <istBestandteilVon< NamNum (Rechtsgemeinschaft) 
-      LEFT JOIN alkis_wertearten wr
-        ON cast(r.artderrechtsgemeinschaft AS character varying)=wr.k AND wr.element='ax_namensnummer' AND wr.bezeichnung='artderrechtsgemeinschaft' 
-      WHERE NOT r.artderrechtsgemeinschaft IS NULL ) AS rg  -- Rechtsgemeinschaft
-   ON rg.gml_id = gb.gml_id  -- zum GB
-  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
-  ORDER BY f.flurstueckskennzeichen, 
-           gb.bezirk, gb.buchungsblattnummermitbuchstabenerweiterung, s.laufendenummer,
-           nn.laufendenummernachdin1421;
-
-COMMENT ON VIEW exp_csv_str_alt 
- 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.';
-*/
-
--- 2016-12-01: Neue schnellere Version unter Vermeidung von "doppelverbindung":
---		Etwa um den Faktor 2,5 schneller als die alte Version
--- 2017-02-23: Spalte fall aus View "flst_an_strasse" als Spalte ausgeben.
---             Darauf basiert ein neuer Filter im Programm "alkisexport.php"
-
--- ToDo: Den View "flst_an_strasse" mÃ¶glichst auch nicht im Views verwenden.
---       Ist 4-fach-Union ectl. schneller ??
-
-DROP VIEW IF EXISTS exp_csv_str;
-
-CREATE OR REPLACE VIEW exp_csv_str
-AS
- SELECT
-    l.stgml,                                             -- Filter: gml_id aus "ax_lagebezeichnungkatalogeintrag"
-                                                         -- UNTERSCHIED zu exp_csv
-    l.fall,                                              -- mit/ohne Hausnummer zur Lage
-  -- F l u r s t ÃŒ c k
-    f.gml_id                             AS fsgml,       -- mÃ¶glicher Filter FlurstÃŒcks-GML-ID
-    f.flurstueckskennzeichen             AS fs_kennz,
-    f.gemarkungsnummer,                                  -- Teile des FS-Kennz. noch mal einzeln
-    f.flurnummer, f.zaehler, f.nenner, 
-    f.amtlicheflaeche                    AS fs_flae,
-    g.bezeichnung                        AS gemarkung,
-  -- G r u n d b u c h
-  --gb.gml_id                            AS gbgml,       -- mÃ¶glicher Filter Grundbuch-GML-ID
-    gb.bezirk                            AS gb_bezirk,
-    gb.buchungsblattnummermitbuchstabenerweiterung AS gb_blatt,
-    z.bezeichnung                        AS beznam,      -- GB-Bezirks-Name
-  -- B u c h u n g s s t e l l e  (GrundstÃŒck)
-    s.laufendenummer                     AS bu_lfd,      -- BVNR
-    '=' || s.zaehler || '/' || s.nenner  AS bu_ant,      -- als Excel-Formel (nur bei Wohnungsgrundbuch JOIN ÃŒber 'Recht an')
-    s.buchungsart,                                       -- verschlÃŒsselt
-    wb.v                                 AS bu_art,      -- Buchungsart entschlÃŒsselt
-  -- N a m e n s N u m m e r  (Normalfall mit Person)
-    nn.laufendenummernachdin1421         AS nam_lfd, 
-    '=' || nn.zaehler|| '/' || nn.nenner AS nam_ant,     -- als Excel-Formel
-  -- 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)
-    rg.artderrechtsgemeinschaft          AS nam_adr,
-    rg.v                                 AS nam_adrv,    -- Art der Rechtsgem. - Value zum Key
-    rg.beschriebderrechtsgemeinschaft    AS nam_bes,
-  -- P e r s o n
-  --p.gml_id                             AS psgml,       -- mÃ¶glicher Filter Personen-GML-ID
-    p.anrede,                                            -- Anrede key
-    wp.v                                 AS anrv,        -- Anrede Value zum Key
-    p.vorname,
-    p.namensbestandteil,
-    p.nachnameoderfirma,                                 -- Familienname
-    p.geburtsdatum,
-  -- A d r e s s e  der Person
-    a.postleitzahlpostzustellung         AS plz,
-    a.ort_post                           AS ort,         -- Anschreifenzeile 1: PLZ+Ort
-    a.strasse,  a.hausnummer,                            -- Anschriftenzeile 2: StraÃe+HsNr
-    a.bestimmungsland                    AS land
-  FROM ax_flurstueck    f               -- FlurstÃŒck
-  JOIN flst_an_strasse  l               -- Lage (hier zusÃ€tzlicher JOIN gegenÃŒber Version "exp_csv") 
-    ON l.fsgml = f.gml_id               -- ToDo: ++ Durch UNION ersetzen! Oder durch Subquery? ++
-  JOIN ax_gemarkung g                   -- entschlÃŒsseln
-    ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer 
-  JOIN ax_buchungsstelle s              -- FS >istGebucht> Buchungstelle
-    ON f.istgebucht = s.gml_id
-  JOIN ax_buchungsblatt  gb             -- Buchung >istBestandteilVon> Grundbuchblatt
-    ON gb.gml_id = s.istbestandteilvon
-  JOIN ax_buchungsblattbezirk z 
-    ON gb.land=z.land AND gb.bezirk=z.bezirk 
-  JOIN ax_namensnummer nn               -- Blatt <istBestandteilVon< NamNum
-    ON gb.gml_id = nn.istbestandteilvon
-  JOIN ax_person p                      -- NamNum >benennt> Person 
-    ON p.gml_id = nn.benennt
-  LEFT JOIN ax_anschrift a 
-    ON a.gml_id = ANY (p.hat)
-  -- E n t s c h l ÃŒ s s e l n:
-  LEFT JOIN alkis_wertearten wp         -- EntschlÃŒsseln "Person - Anrede"
-    ON cast(p.anrede AS character varying) = wp.k 
-   AND wp.element = 'ax_person' 
-   AND wp.bezeichnung = 'anrede' 
-  LEFT JOIN alkis_wertearten wb         -- EntschlÃŒsseln "Buchungsart"
-    ON cast(s.buchungsart AS character varying) = wb.k
- -- buchungsart = integer / .k  = char 4stellig
-   AND wb.element = 'ax_buchungsstelle'
-   AND wb.bezeichnung = 'buchungsart' 
-  -- 2mal "LEFT JOIN" verdoppelt die Zeile in der Ausgabe. Darum als Subquery in Spalten packen:
-  -- Noch mal "GB -> NamNum", aber dieses Mal fÃŒr "Rechtsgemeinschaft".
-  -- Kommt max. 1 mal je GB vor und hat keine Relation auf Person.
-  LEFT JOIN
-   ( SELECT gr.gml_id, r.artderrechtsgemeinschaft, r.beschriebderrechtsgemeinschaft, wr.v
-       FROM ax_namensnummer r 
-       JOIN ax_buchungsblatt gr
-         ON r.istbestandteilvon = gr.gml_id -- Blatt <istBestandteilVon< NamNum (Rechtsgemeinschaft) 
-      LEFT JOIN alkis_wertearten wr
-        ON cast(r.artderrechtsgemeinschaft AS character varying)=wr.k AND wr.element='ax_namensnummer' AND wr.bezeichnung='artderrechtsgemeinschaft' 
-      WHERE NOT r.artderrechtsgemeinschaft IS NULL ) AS rg -- Rechtsgemeinschaft
-   ON rg.gml_id = gb.gml_id  -- zum GB
-  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
-UNION
- SELECT
-    l.stgml,                                             -- Filter: gml_id aus "ax_lagebezeichnungkatalogeintrag"
-                                                         -- UNTERSCHIED zu exp_csv
-    l.fall,                                              -- mit/ohne Hausnummer zur Lage
-  -- F l u r s t ÃŒ c k
-    f.gml_id                             AS fsgml,       -- mÃ¶glicher Filter FlurstÃŒcks-GML-ID
-    f.flurstueckskennzeichen             AS fs_kennz,
-    f.gemarkungsnummer,                                  -- Teile des FS-Kennz. noch mal einzeln
-    f.flurnummer, f.zaehler, f.nenner, 
-    f.amtlicheflaeche                    AS fs_flae,
-    g.bezeichnung                        AS gemarkung,
-  -- G r u n d b u c h
-  --gb.gml_id                            AS gbgml,       -- mÃ¶glicher Filter Grundbuch-GML-ID
-    gb.bezirk                            AS gb_bezirk,
-    gb.buchungsblattnummermitbuchstabenerweiterung AS gb_blatt,
-    z.bezeichnung                        AS beznam,      -- GB-Bezirks-Name
-  -- B u c h u n g s s t e l l e  (GrundstÃŒck)
-    s.laufendenummer                     AS bu_lfd,      -- BVNR
-    '=' || s.zaehler || '/' || s.nenner  AS bu_ant,      -- als Excel-Formel (nur bei Wohnungsgrundbuch JOIN ÃŒber 'Recht an')
-    s.buchungsart,                                       -- verschlÃŒsselt
-    wb.v                                 AS bu_art,      -- Buchungsart entschlÃŒsselt
-  -- N a m e n s N u m m e r  (Normalfall mit Person)
-    nn.laufendenummernachdin1421         AS nam_lfd, 
-    '=' || nn.zaehler|| '/' || nn.nenner AS nam_ant,     -- als Excel-Formel
-  -- 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)
-    rg.artderrechtsgemeinschaft          AS nam_adr,
-    rg.v                                 AS nam_adrv,    -- Art der Rechtsgem. - Value zum Key
-    rg.beschriebderrechtsgemeinschaft    AS nam_bes,
-  -- P e r s o n
-  --p.gml_id                             AS psgml,       -- mÃ¶glicher Filter Personen-GML-ID
-    p.anrede,                                            -- Anrede key
-    wp.v                                 AS anrv,        -- Anrede Value zum Key
-    p.vorname,
-    p.namensbestandteil,
-    p.nachnameoderfirma,                                 -- Familienname
-    p.geburtsdatum,
-   -- A d r e s s e  der Person
-    a.postleitzahlpostzustellung         AS plz,
-    a.ort_post                           AS ort,         -- Anschreifenzeile 1: PLZ+Ort
-    a.strasse,  a.hausnummer,                            -- Anschriftenzeile 2: StraÃe+HsNr
-    a.bestimmungsland                    AS land
-  FROM ax_flurstueck f                  -- FlurstÃŒck
-  JOIN flst_an_strasse  l               -- Lage (hier zusÃ€tzlicher JOIN gegenÃŒber Version "exp_csv") 
-    ON l.fsgml = f.gml_id 
-  JOIN ax_gemarkung g                   -- entschlÃŒsseln
-    ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer 
-  -- FS >istGebucht> Buchungstelle  <an<  Buchungstelle
- -- Variante mit 2 Buchungs-Stellen (Recht An)
-  JOIN ax_buchungsstelle dien           -- dienende Buchung
-    ON f.istgebucht = dien.gml_id
-  JOIN ax_buchungsstelle s              -- herrschende Buchung
-    ON dien.gml_id = ANY (s.an)         -- hat Recht an
-  JOIN ax_buchungsblatt  gb             -- Buchung >istBestandteilVon> Grundbuchblatt
-    ON gb.gml_id = s.istbestandteilvon
-  JOIN ax_buchungsblattbezirk z 
-    ON gb.land=z.land AND gb.bezirk=z.bezirk 
-  JOIN ax_namensnummer nn               -- Blatt <istBestandteilVon< NamNum
-    ON gb.gml_id = nn.istbestandteilvon
-  JOIN ax_person p                      -- NamNum >benennt> Person 
-    ON p.gml_id = nn.benennt
-  LEFT JOIN ax_anschrift a 
-    ON a.gml_id = ANY (p.hat)
-  -- E n t s c h l ÃŒ s s e l n:
-  LEFT JOIN alkis_wertearten wp         -- EntschlÃŒsseln "Person - Anrede"
-    ON cast(p.anrede AS character varying)=wp.k AND wp.element='ax_person' AND wp.bezeichnung='anrede' 
-  LEFT JOIN alkis_wertearten wb         -- EntschlÃŒsseln "Buchungsart"
-    ON cast(s.buchungsart AS character varying) = wb.k 
-   AND wb.element = 'ax_buchungsstelle' 
-   AND wb.bezeichnung = 'buchungsart' 
-  LEFT JOIN
-   ( SELECT gr.gml_id, r.artderrechtsgemeinschaft, r.beschriebderrechtsgemeinschaft, wr.v
-       FROM ax_namensnummer r 
-       JOIN ax_buchungsblatt gr
-         ON r.istbestandteilvon = gr.gml_id -- Blatt <istBestandteilVon< NamNum (Rechtsgemeinschaft) 
-      LEFT JOIN alkis_wertearten wr
-        ON cast(r.artderrechtsgemeinschaft AS character varying)=wr.k AND wr.element='ax_namensnummer' AND wr.bezeichnung='artderrechtsgemeinschaft' 
-      WHERE NOT r.artderrechtsgemeinschaft IS NULL ) AS rg -- Rechtsgemeinschaft
-   ON rg.gml_id = gb.gml_id  -- zum GB
-  WHERE f.endet IS NULL AND s.endet IS NULL and gb.endet IS NULL and nn.endet IS NULL AND p.endet IS NULL
-    AND dien.endet IS NULL
-
-ORDER BY fs_kennz,   -- f.flurstueckskennzeichen, 
-         gb_bezirk,  -- gb.bezirk, 
-         gb_blatt,   -- gb.buchungsblattnummermitbuchstabenerweiterung,
-         bu_lfd,     -- s.laufendenummer,
-         nam_lfd;    -- nn.laufendenummernachdin1421
-
-COMMENT ON VIEW exp_csv_str 
- 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.';
-
-
--- B e r e c h t i g u n g e n
--- ============================
--- Analog "grant.sql"
--- Die ALKIS-Navigation fÃŒr Mapbender 2.7 und die Buchauskunft verwendet den DB-User "mb27"
-
--- Tabellen der ALKIS-Struktur
--- -----------------------------------------------------------------------
-
-  GRANT SELECT ON TABLE public.ap_pto TO mb27;
-
-  GRANT SELECT ON TABLE public.ax_anschrift TO mb27;
-  GRANT SELECT ON TABLE public.ax_bauraumoderbodenordnungsrecht TO mb27;
-  GRANT SELECT ON TABLE public.ax_besondereflurstuecksgrenze TO mb27;
-  GRANT SELECT ON TABLE public.ax_buchungsblatt TO mb27;
-  GRANT SELECT ON TABLE public.ax_buchungsblattbezirk TO mb27;
-  GRANT SELECT ON TABLE public.ax_buchungsstelle TO mb27;
-  GRANT SELECT ON TABLE public.ax_bundesland TO mb27;
-  GRANT SELECT ON TABLE public.ax_dienststelle TO mb27;
-  GRANT SELECT ON TABLE public.ax_flurstueck TO mb27;
-  GRANT SELECT ON TABLE public.ax_gebaeude TO mb27;
-  GRANT SELECT ON TABLE public.ax_gemarkung TO mb27;
-  GRANT SELECT ON TABLE public.ax_gemarkungsteilflur TO mb27;
-  GRANT SELECT ON TABLE public.ax_gemeinde TO mb27;
-  GRANT SELECT ON TABLE public.ax_historischesflurstueck TO mb27;
-  GRANT SELECT ON TABLE public.ax_historischesflurstueckohneraumbezug TO mb27;
-  GRANT SELECT ON TABLE public.ax_kreisregion TO mb27;
-  GRANT SELECT ON TABLE public.ax_lagebezeichnungkatalogeintrag TO mb27;
-  GRANT SELECT ON TABLE public.ax_lagebezeichnungmithausnummer TO mb27;
-  GRANT SELECT ON TABLE public.ax_lagebezeichnungmitpseudonummer TO mb27;
-  GRANT SELECT ON TABLE public.ax_lagebezeichnungohnehausnummer TO mb27;
-  GRANT SELECT ON TABLE public.ax_namensnummer TO mb27;
-  GRANT SELECT ON TABLE public.ax_person TO mb27;
-  GRANT SELECT ON TABLE public.ax_regierungsbezirk TO mb27;
-
--- Tabellen der norGIS-Metadaten (Ersatz fÃŒr SchlÃŒssel-Tabellen )
--- -----------------------------------------------------------------------
-
-  GRANT SELECT ON TABLE public.alkis_elemente   TO mb27;
-  GRANT SELECT ON TABLE public.alkis_wertearten TO mb27;
-
--- Tabellen des norGIS-PostProcessing  (Ersatz Classic-Post-Processing)
--- -----------------------------------------------------------------------
-  -- Dies muss nach einer Datenbank-Aktualisierung neu berechtigt werden
-  GRANT SELECT ON TABLE public.gem_shl  TO mb27;
-  GRANT SELECT ON TABLE public.gema_shl TO mb27;
-  GRANT SELECT ON TABLE public.nutz_21  TO mb27;
-  GRANT SELECT ON TABLE public.nutz_shl TO mb27;
-
--- Views in der norGIS-Struktur, die SchlÃŒssel-Tabellen ersetzen
--- -----------------------------------------------------------------------
---  Diese Views werden nicht verwendet. 
---  Es wird jeweils direkt die Tabelle "alkis_wertearten" benutzt.
-
---GRANT SELECT ON TABLE public.v_andstrass_adf TO mb27;
---GRANT SELECT ON TABLE public.v_baurecht_adf TO mb27;
---GRANT SELECT ON TABLE public.v_bauteil_bauart TO mb27;
---GRANT SELECT ON TABLE public.v_bewertg_klass TO mb27;
---GRANT SELECT ON TABLE public.v_bs_buchungsart TO mb27;
---GRANT SELECT ON TABLE public.v_bschaetz_bodenart TO mb27;
---GRANT SELECT ON TABLE public.v_bschaetz_entsteh_klima TO mb27;
---GRANT SELECT ON TABLE public.v_bschaetz_kulturart TO mb27;
---GRANT SELECT ON TABLE public.v_bschaetz_sonst TO mb27;
---GRANT SELECT ON TABLE public.v_bschaetz_zustandsstufe TO mb27;
---GRANT SELECT ON TABLE public.v_datenerhebung TO mb27;
---GRANT SELECT ON TABLE public.v_denkmal_adf TO mb27;
---GRANT SELECT ON TABLE public.v_forstrecht_adf TO mb27;
---GRANT SELECT ON TABLE public.v_forstrecht_besfkt TO mb27;
---GRANT SELECT ON TABLE public.v_geb_bauweise TO mb27;
---GRANT SELECT ON TABLE public.v_geb_dachform TO mb27;
---GRANT SELECT ON TABLE public.v_geb_dachgeschossausbau TO mb27;
---GRANT SELECT ON TABLE public.v_geb_funktion TO mb27;
---GRANT SELECT ON TABLE public.v_geb_lagezeo TO mb27;
---GRANT SELECT ON TABLE public.v_geb_weiterefkt TO mb27;
---GRANT SELECT ON TABLE public.v_geb_zustand TO mb27;
---GRANT SELECT ON TABLE public.v_grabloch_bedeutg TO mb27;
---GRANT SELECT ON TABLE public.v_haeuser TO mb27;
---GRANT SELECT ON TABLE public.v_klass_strass_adf TO mb27;
---GRANT SELECT ON TABLE public.v_klass_wasser_adf TO mb27;
---GRANT SELECT ON TABLE public.v_muster_merkmal TO mb27;
---GRANT SELECT ON TABLE public.v_namnum_eigart TO mb27;
---GRANT SELECT ON TABLE public.v_sbauwerk_bwfkt TO mb27;
---GRANT SELECT ON TABLE public.v_sonstrecht_adf TO mb27;
---GRANT SELECT ON TABLE public.v_umweltrecht_adf TO mb27;
-
-
--- Berechtigung fuer Views
--- -----------------------------------------------------------------------
-
-  -- Bausteine fÃŒr andere Views
-  GRANT SELECT ON TABLE public.doppelverbindung TO mb27;
-  GRANT SELECT ON TABLE public.flst_an_strasse  TO mb27;
-
-  -- alkis_export als CSV
-  GRANT SELECT ON TABLE public.exp_csv     TO mb27;
-  GRANT SELECT ON TABLE public.exp_csv_str TO mb27;
-
--- Ende --
