source: Version-0.8/import/sichten.sql @ 326

Revision 326, 68.0 KB checked in by frank.jaeger, 10 years ago (diff)

laufende Arbeiten um Tabelle "alkis_beziehungen" aus den Views zu entfernen

Line 
1-- =====
2-- ALKIS
3-- =====
4
5--  -----------------------------------------
6--  Sichten fÃŒr Fehlersuche und Daten-Analyse
7--  -----------------------------------------
8
9--  Dieses SQL braucht nur bei Bedarf in einer PostNAS-DB verarbeitet werden.
10--  Es werden zusÀtzliche Views eingerichtet, die nur bei Fehlersuche und Analyse (vom Entwickler) benötigt werden.
11
12--  PostNAS
13
14--  2012-04-17 flstnr_ohne_position
15--  2012-04-24 pauschal Filter 'endet IS NULL' um historische Objekte auszublenden
16--  2012-10-29 Redundanzen in Beziehungen suchen (entstehen durch replace)
17--  2013-02-20 Mehrfache Buchungsstellen zum FS suchen, dies sind Auswirkungen eines Fehlers bei Replace
18--  2013-03-05 Beschriftungen aus ap_pto auseinander sortieren, neuer View "grenzpunkt"
19--  2013-03-12 Optimierung Hausnummern, View "gebaeude_txt" (Funktion und Name)
20--  2013-04-15 UnterdrÃŒcken doppelter Darstellung in den Views 'ap_pto_stra', 'ap_pto_nam', 'ap_pto_rest'
21--  2013-04-16 Thema "BodenschÀtzung" und fehlernde Kommentare zum Views ergÀnzt.
22--             Diese Datei aufgeteilt in "sichten.sql" und "sichten_wms.sql"
23--  2013-10-23 Fehlersuche GebÀude-Hausnummer-Relation
24--  2013-11-26 Neue Views (doppelverbindung)
25--  2014-01-17 View "exp_csv" fÃŒr den Export von CSV-Daten aus der Auskunft mit Modul alkisexport.php.
26--  2014-01-20 Erweiterung "exp_csv" fÃŒr alkisexport.php
27--  2014-01-21 In "exp_csv": Rechtsgemeinsachaft zu allen Personen statt als eigener Satz.
28--  2014-01-27 Neuer Baustein "flst_an_strasse". Neuer View "exp_csv_str" fÃŒr CSV-Export von Flst. an einer Straße
29--  2014-01-29 Neuer View "strasse_als_gewanne" zur Fehlersuche.
30--  2014-01-31 Kommentar
31--  2014-02-06 nachmigration_aehnliche_anschriften
32--  2014-08-28 Die Tabelle "alkis_beziehungen" ÃŒberflÃŒssig machen.
33--             Relationen nun direkt ÃŒber neue Spalten in den Objekttabellen.
34
35     -- IN ARBEIT +++ erst teilweise umgestellt
36
37
38-- Bausteine fÃŒr andere Views:
39-- ---------------------------
40
41-- Ein View, der die Verbindung von FlurstÌck zur Buchung fÌr zwei verschiedene FÀlle herstellt.
42-- Einmal die "normalen" (direkten) Buchungen.
43-- Zweitens ÃŒber die Rechte von Buchungsstellen an anderen Buchungsstellen.
44-- Dies kann als "MittelstÃŒck" in den anderen Views eingefÃŒgt werden.
45
46-- Einfach/Direkt:
47--   FlurstÃŒck   >istGebucht>                         (Buchungs-Stelle)
48--
49-- Mit "Recht an":
50--   FlurstÃŒck   >istGebucht>  Buchungs-Stelle  <an<  (Buchungs-Stelle)
51--                               (dienend)              (herrschend)
52
53--           DROP VIEW public.doppelverbindung;
54
55CREATE OR REPLACE VIEW public.doppelverbindung
56AS
57  -- FS >istGebucht> Buchungstelle
58  SELECT f1.gml_id             AS fsgml,    -- gml_id FlurstÃŒck
59         b1.gml_id             AS bsgml,    -- gml_id Buchungs
60         0                     AS ba_dien
61    FROM ax_flurstueck f1
62    JOIN ax_buchungsstelle b1   ON f1.istgebucht = b1.gml_id
63 UNION
64  -- FS >istGebucht> Buchungstelle  <an<  Buchungstelle
65  SELECT f2.gml_id              AS fsgml,   -- gml_id FlurstÃŒck
66         b2.gml_id              AS bsgml,   -- gml_id Buchung - (herrschendes GB)
67         dien.buchungsart       AS ba_dien  -- Ein Feld aus der Zwischen-Buchung zur Fall-Unterscheidung
68    FROM ax_flurstueck f2
69    JOIN ax_buchungsstelle dien ON f2.istGebucht = dien.gml_id
70    JOIN ax_buchungsstelle b2   ON dien.gml_id = ANY (b2.an);
71
72
73COMMENT ON VIEW public.doppelverbindung
74 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.';
75
76-- Test-Ausgabe: Ein paar FÀlle mit "Recht an"
77--   SELECT * FROM doppelverbindung WHERE ba_dien > 0 LIMIT 20;
78
79
80-- Ein View, der die Verbindung von FlurstÃŒck zur Straßentabelle fÃŒr zwei verschiedene FÀlle herstellt.
81-- Einmal ÃŒber die Lagebezeichnung MIT Hausnummer und einmal OHNE.
82-- Dies kann als "MittelstÃŒck" in den anderen Views eingefÃŒgt werden.
83
84--           DROP VIEW public.flst_an_strasse;
85
86CREATE OR REPLACE VIEW public.flst_an_strasse
87AS
88  -- FlurstÃŒck >weistAuf> ax_lagebezeichnungmithausnummer <JOIN> ax_lagebezeichnungkatalogeintrag
89  SELECT fm.gml_id AS fsgml,
90         sm.gml_id AS stgml,                 -- Filter: gml_id der Straße
91         'm' AS fall                         -- SÀtze unterschieden: Mit HsNr
92    FROM ax_flurstueck fm                    -- FlurstÃŒck Mit
93    JOIN ax_lagebezeichnungmithausnummer lm  -- Lage MIT
94      ON lm.gml_id = ANY (fm.weistauf) 
95    JOIN ax_lagebezeichnungkatalogeintrag sm
96      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
97 UNION
98  -- FlurstÃŒck >zeigtAuf> ax_lagebezeichnungohnehausnummer <JOIN> ax_lagebezeichnungkatalogeintrag
99  SELECT fo.gml_id AS fsgml,
100         so.gml_id AS stgml,                 -- Filter: gml_id der Straße
101         'o' AS fall                         -- SÀtze unterschieden: Ohne HsNr
102    FROM ax_flurstueck fo                    -- FlurstÃŒck OHNE
103    JOIN ax_lagebezeichnungohnehausnummer lo -- Lage OHNE
104      ON lo.gml_id = ANY (fo.zeigtauf) 
105    JOIN ax_lagebezeichnungkatalogeintrag so -- Straße OHNE
106      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;
107
108COMMENT ON VIEW public.flst_an_strasse
109 IS 'ALKIS-Beziehung von FlurstÃŒck zu Straßentabelle. UNION-Zusammenfassung der FÀlle MIT und OHNE Hausnummer.';
110
111-- Muss man noch dafÃŒr sorgen, dass FlurstÃŒck nicht doppelt vorkommt? z.B. mit DISTINCT
112-- Oder mÃŒssen ggf. mehrfache FS im Programm ÃŒbersprungen werden?
113
114-- Test-Ausgabe:
115--   SELECT * FROM flst_an_strasse WHERE stgml='DENW18AL000004Fl' LIMIT 40;
116
117-- Ende "Bausteine"
118
119
120-- Generelle Export-Struktur "FlurstÃŒck - Buchung - Grundbuch - Person"
121-- --------------------------------------------------------------------
122-- Verwendet den gespeicherten View "doppelverbindung".
123-- Wird benötigt im Auskunft-Modul "alkisexport.php":
124-- Je nach aufrufendem Modul wird der Filter (WHERE) an anderer Stelle gesetzt (gml_id von FS, GB oder Pers.)
125-- FÃŒr Filter nach "Straße" siehe die nachfolgende Sonderversion "exp_csv_str".
126
127-- Problem / Konflikt:
128-- Es kann nur eine lineare Struktur aus Spalten und Zeilen exportiert werden.
129-- Wenn nicht nur die Daten des Ausgangs-Objektes exportiert werden, sondern auch verbundene Tabellen in
130-- einer 1:N-Struktur, dann verdoppeln sich Zeileninhalte und es werden redundante Daten erzeugt.
131-- Diese Redundanzen mÃŒssen vom dem Programm gefiltert werden, das die Daten ÃŒber eine Schnittstelle einliest.
132
133-- Anwendungs-Beispiel: Abrechnung von AnliegerbeitrÀgen.
134
135-- 2014-01-21: "Rechtsgemeinschaft" in den Datensatz aller anderen Namen
136
137--           DROP VIEW exp_csv;
138
139/*
140-- alte Version mit Relationen ÃŒber die Tabelle "alkis_beziehungen":
141CREATE OR REPLACE VIEW exp_csv
142AS
143 SELECT
144  -- FlurstÃŒck
145    f.gml_id                             AS fsgml,       -- möglicher Filter FlurstÃŒcks-GML-ID
146    f.flurstueckskennzeichen             AS fs_kennz,
147    f.gemarkungsnummer,                                  -- Teile des FS-Kennz. noch mal einzeln
148    f.flurnummer, f.zaehler, f.nenner,
149    f.amtlicheflaeche                    AS fs_flae,
150    g.bezeichnung                        AS gemarkung,
151
152  -- Grundbuch
153    gb.gml_id                            AS gbgml,       -- möglicher Filter Grundbuch-GML-ID
154    gb.bezirk                            AS gb_bezirk,
155    gb.buchungsblattnummermitbuchstabenerweiterung AS gb_blatt,
156    z.bezeichnung                        AS beznam,      -- GB-Bezirks-Name
157
158  -- Buchungsstelle (GrundstÃŒck)
159    s.laufendenummer                     AS bu_lfd,      -- BVNR
160    --s.zaehler, s.nenner,                                -- Anteil des GB am FS, einzelne Felder
161    '=' || s.zaehler || '/' || s.nenner  AS bu_ant,      -- als Excel-Formel (nur bei Wohnungsgrundbuch JOIN ÃŒber 'Recht an')
162    s.buchungsart,                                       -- verschlÃŒsselt
163    b.bezeichner                         AS bu_art,      -- Buchungsart entschlÃŒsselt
164
165  -- NamensNummer (Normalfall mit Person)
166    nn.laufendenummernachdin1421         AS nam_lfd,
167    '=' || nn.zaehler|| '/' || nn.nenner AS nam_ant,         -- als Excel-Formel
168
169  -- Rechtsgemeinsachaft (Sonderfall von Namensnummer, ohne Person, ohne Nummer)
170    rg.artderrechtsgemeinschaft          AS nam_adr,
171    rg.beschriebderrechtsgemeinschaft    AS nam_bes,
172
173  -- Person
174    p.gml_id                             AS psgml,           -- möglicher Filter Personen-GML-ID
175    p.anrede,
176    p.vorname,
177    p.namensbestandteil,
178    p.nachnameoderfirma,                                     -- Familienname
179    p.geburtsdatum,
180    --p.geburtsname, p.akademischergrad
181 
182  -- Adresse der Person
183    a.postleitzahlpostzustellung         AS plz,
184    a.ort_post                           AS ort,             -- Anschreifenzeile 1: PLZ+Ort
185    a.strasse,  a.hausnummer,                                -- Anschriftenzeile 2: Straße+HsNr
186    a.bestimmungsland                    AS land
187
188  FROM ax_flurstueck    f               -- FlurstÃŒck
189  JOIN doppelverbindung d               -- beide FÀlle ÃŒber Union-View: direkt und ÃŒber Recht von Buchung an Buchung
190    ON d.fsgml = f.gml_id
191
192  JOIN ax_gemarkung g                   -- entschlÃŒsseln
193    ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer
194
195  JOIN ax_buchungsstelle s              -- Buchungs-Stelle
196    ON d.bsgml = s.gml_id
197  JOIN ax_buchungsstelle_buchungsart b  -- EnstschlÃŒsselung der Buchungsart
198    ON s.buchungsart = b.wert
199
200  JOIN alkis_beziehungen v3             -- Buchung --> Grundbuchblatt
201    ON s.gml_id = v3.beziehung_von AND v3.beziehungsart = 'istBestandteilVon'
202  JOIN ax_buchungsblatt  gb
203    ON v3.beziehung_zu = gb.gml_id
204
205  JOIN ax_buchungsblattbezirk z
206    ON gb.land=z.land AND gb.bezirk=z.bezirk
207
208  JOIN alkis_beziehungen v4             -- Blatt  --> NamNum
209    ON v4.beziehung_zu = gb.gml_id AND v4.beziehungsart = 'istBestandteilVon' 
210  JOIN ax_namensnummer nn
211    ON v4.beziehung_von = nn.gml_id
212
213  JOIN alkis_beziehungen v5             -- NamNum --> Person
214   -- 2014-01-20: Mit LEFT ab hier werden auch NumNum-Zeilen mit "Beschreibung der Rechtsgemeinschaft" geliefert (ohne Person)
215    ON v5.beziehung_von = nn.gml_id AND v5.beziehungsart = 'benennt'
216  JOIN ax_person p
217    ON v5.beziehung_zu = p.gml_id
218
219  LEFT JOIN alkis_beziehungen v6        -- Person --> Anschrift
220    ON v6.beziehung_von = p.gml_id AND v6.beziehungsart = 'hat'
221  LEFT JOIN ax_anschrift a
222    ON v6.beziehung_zu = a.gml_id
223
224  -- 2mal "LEFT JOIN" verdoppelt die Zeile in der Ausgabe. Darum als Subquery:
225
226  -- Noch mal "GB -> NamNum", aber dieses Mal fÃŒr "Rechtsgemeinschaft".
227  -- Kommt max. 1 mal je GB vor und hat keine Relation auf Person.
228  LEFT JOIN
229   ( SELECT v7.beziehung_zu,
230            rg.artderrechtsgemeinschaft,
231            rg.beschriebderrechtsgemeinschaft
232       FROM ax_namensnummer rg
233       JOIN alkis_beziehungen v7              -- Blatt  --> NamNum (Rechtsgemeinschaft)
234         ON v7.beziehung_von = rg.gml_id
235      WHERE v7.beziehungsart = 'istBestandteilVon'
236        AND NOT rg.artderrechtsgemeinschaft IS NULL
237   ) AS rg                         -- Rechtsgemeinschaft
238   ON rg.beziehung_zu = gb.gml_id  -- zum GB
239
240  ORDER BY f.flurstueckskennzeichen,
241           gb.bezirk, gb.buchungsblattnummermitbuchstabenerweiterung, s.laufendenummer,
242           nn.laufendenummernachdin1421;
243
244*/
245-- neue Version mit Relationen OHNE die Tabelle "alkis_beziehungen":
246-- +++ ToDo
247
248
249CREATE OR REPLACE VIEW exp_csv
250AS
251 SELECT
252  -- FlurstÃŒck
253    f.gml_id                             AS fsgml,       -- möglicher Filter FlurstÃŒcks-GML-ID
254    f.flurstueckskennzeichen             AS fs_kennz,
255    f.gemarkungsnummer,                                  -- Teile des FS-Kennz. noch mal einzeln
256    f.flurnummer, f.zaehler, f.nenner,
257    f.amtlicheflaeche                    AS fs_flae,
258    g.bezeichnung                        AS gemarkung,
259
260  -- Grundbuch
261    gb.gml_id                            AS gbgml,       -- möglicher Filter Grundbuch-GML-ID
262    gb.bezirk                            AS gb_bezirk,
263    gb.buchungsblattnummermitbuchstabenerweiterung AS gb_blatt,
264    z.bezeichnung                        AS beznam,      -- GB-Bezirks-Name
265
266  -- Buchungsstelle (GrundstÃŒck)
267    s.laufendenummer                     AS bu_lfd,      -- BVNR
268    --s.zaehler, s.nenner,                                -- Anteil des GB am FS, einzelne Felder
269    '=' || s.zaehler || '/' || s.nenner  AS bu_ant,      -- als Excel-Formel (nur bei Wohnungsgrundbuch JOIN ÃŒber 'Recht an')
270    s.buchungsart,                                       -- verschlÃŒsselt
271    b.bezeichner                         AS bu_art,      -- Buchungsart entschlÃŒsselt
272
273  -- NamensNummer (Normalfall mit Person)
274    nn.laufendenummernachdin1421         AS nam_lfd,
275    '=' || nn.zaehler|| '/' || nn.nenner AS nam_ant,         -- als Excel-Formel
276
277  -- Rechtsgemeinsachaft (Sonderfall von Namensnummer, ohne Person, ohne Nummer)
278    rg.artderrechtsgemeinschaft          AS nam_adr,
279    rg.beschriebderrechtsgemeinschaft    AS nam_bes,
280
281  -- Person
282    p.gml_id                             AS psgml,           -- möglicher Filter Personen-GML-ID
283    p.anrede,
284    p.vorname,
285    p.namensbestandteil,
286    p.nachnameoderfirma,                                     -- Familienname
287    p.geburtsdatum,
288    --p.geburtsname, p.akademischergrad
289 
290  -- Adresse der Person
291    a.postleitzahlpostzustellung         AS plz,
292    a.ort_post                           AS ort,             -- Anschreifenzeile 1: PLZ+Ort
293    a.strasse,  a.hausnummer,                                -- Anschriftenzeile 2: Straße+HsNr
294    a.bestimmungsland                    AS land
295
296  FROM ax_flurstueck    f               -- FlurstÃŒck
297  JOIN doppelverbindung d               -- beide FÀlle ÃŒber Union-View: direkt und ÃŒber Recht von Buchung an Buchung
298    ON d.fsgml = f.gml_id
299  JOIN ax_gemarkung g                   -- entschlÃŒsseln
300    ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer
301  JOIN ax_buchungsstelle s              -- Buchungs-Stelle
302    ON d.bsgml = s.gml_id
303  JOIN ax_buchungsstelle_buchungsart b  -- EnstschlÃŒsselung der Buchungsart
304    ON s.buchungsart = b.wert
305  JOIN ax_buchungsblatt  gb             -- Buchung >istBestandteilVon> Grundbuchblatt
306    ON gb.gml_id = s.istbestandteilvon
307  JOIN ax_buchungsblattbezirk z
308    ON gb.land=z.land AND gb.bezirk=z.bezirk
309  JOIN ax_namensnummer nn               -- Blatt <istBestandteilVon< NamNum
310    ON gb.gml_id = nn.istbestandteilvon
311  JOIN ax_person p                      -- NamNum >benennt> Person
312    ON p.gml_id = nn.benennt
313  LEFT JOIN ax_anschrift a
314    ON a.gml_id = ANY (p.hat)
315
316
317-- +++++ BIS HIER BEARBEITET (28.08.) - "alkis_beziehungen" entfernt - HIER Weiter !!!!
318
319
320  -- 2mal "LEFT JOIN" verdoppelt die Zeile in der Ausgabe. Darum als Subquery:
321  -- Noch mal "GB -> NamNum", aber dieses Mal fÃŒr "Rechtsgemeinschaft".
322  -- Kommt max. 1 mal je GB vor und hat keine Relation auf Person.
323  LEFT JOIN
324   ( SELECT v7.beziehung_zu,
325            rg.artderrechtsgemeinschaft,
326            rg.beschriebderrechtsgemeinschaft
327       FROM ax_namensnummer rg
328       JOIN alkis_beziehungen v7              -- Blatt  --> NamNum (Rechtsgemeinschaft)
329         ON v7.beziehung_von = rg.gml_id
330      WHERE v7.beziehungsart = 'istBestandteilVon'
331        AND NOT rg.artderrechtsgemeinschaft IS NULL
332   ) AS rg                         -- Rechtsgemeinschaft
333   ON rg.beziehung_zu = gb.gml_id  -- zum GB
334
335  ORDER BY f.flurstueckskennzeichen,
336           gb.bezirk, gb.buchungsblattnummermitbuchstabenerweiterung, s.laufendenummer,
337           nn.laufendenummernachdin1421;
338
339COMMENT ON VIEW exp_csv
340 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.';
341
342--GRANT SELECT ON TABLE exp_csv TO mb27;       -- User fÃŒr Auskunfts-Programme
343--GRANT SELECT ON TABLE exp_csv TO alkisbuch;  -- User fÃŒr Auskunfts-Programme RLP-Demo
344
345
346-- Variante des View "exp_csv":
347-- Hier wird zusÀtzlich der Baustein "flst_an_strasse" verwendet.
348-- Der Filter "WHERE stgml= " auf die "gml_id" von "ax_lagebezeichnungkatalogeintrag" sollte gesetzt werden
349-- um alle FlurstÃŒcke zu bekommen, die an einer Straße liegen.
350-- DROP           VIEW exp_csv_str;
351
352/*
353-- alte Version mit Relationen ÃŒber die Tabelle "alkis_beziehungen":
354
355CREATE OR REPLACE VIEW exp_csv_str
356AS
357 SELECT
358    l.stgml,                                             -- Filter: Straßen-GML-ID
359
360  -- FlurstÃŒck
361    f.gml_id                             AS fsgml,       -- Gruppenwechsel fÃŒr "function lage_zum_fs" in alkisexport.php
362    f.flurstueckskennzeichen             AS fs_kennz,
363    f.gemarkungsnummer,                                  -- Teile des FS-Kennz. noch mal einzeln
364    f.flurnummer, f.zaehler, f.nenner,
365    f.amtlicheflaeche                    AS fs_flae,
366    g.bezeichnung                        AS gemarkung,
367
368  -- Grundbuch
369  --gb.gml_id                            AS gbgml,       -- möglicher Filter Grundbuch-GML-ID
370    gb.bezirk                            AS gb_bezirk,
371    gb.buchungsblattnummermitbuchstabenerweiterung AS gb_blatt,
372    z.bezeichnung                        AS beznam,      -- GB-Bezirks-Name
373
374  -- Buchungsstelle (GrundstÃŒck)
375    s.laufendenummer                     AS bu_lfd,      -- BVNR
376    --s.zaehler, s.nenner,                                -- Anteil des GB am FS, einzelne Felder
377    '=' || s.zaehler || '/' || s.nenner  AS bu_ant,      -- als Excel-Formel (nur bei Wohnungsgrundbuch JOIN ÃŒber 'Recht an')
378    s.buchungsart,                                       -- verschlÃŒsselt
379    b.bezeichner                         AS bu_art,      -- Buchungsart entschlÃŒsselt
380
381  -- NamensNummer (Normalfall mit Person)
382    nn.laufendenummernachdin1421         AS nam_lfd,
383    '=' || nn.zaehler|| '/' || nn.nenner AS nam_ant,         -- als Excel-Formel
384
385  -- Rechtsgemeinsachaft (Sonderfall von Namensnummer, ohne Person, ohne Nummer)
386    rg.artderrechtsgemeinschaft          AS nam_adr,
387    rg.beschriebderrechtsgemeinschaft    AS nam_bes,
388
389  -- Person
390  --p.gml_id                             AS psgml,           -- möglicher Filter Personen-GML-ID
391    p.anrede,
392    p.vorname,
393    p.namensbestandteil,
394    p.nachnameoderfirma,                                     -- Familienname
395    p.geburtsdatum,
396    --p.geburtsname, p.akademischergrad
397 
398  -- Adresse der Person
399    a.postleitzahlpostzustellung         AS plz,
400    a.ort_post                           AS ort,             -- Anschreifenzeile 1: PLZ+Ort
401    a.strasse,  a.hausnummer,                                -- Anschriftenzeile 2: Straße+HsNr
402    a.bestimmungsland                    AS land
403
404  FROM ax_flurstueck    f               -- FlurstÃŒck
405
406  JOIN flst_an_strasse  l               -- Lage (hier zusÀtzlicher JOIN gegenÃŒber Version "exp_csv")
407        ON l.fsgml = f.gml_id
408
409  JOIN doppelverbindung d               -- beide FÀlle ÃŒber Union-View: direkt und ÃŒber Recht von Buchung an Buchung
410    ON d.fsgml = f.gml_id
411
412  JOIN ax_gemarkung g                   -- entschlÃŒsseln
413    ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer
414
415  JOIN ax_buchungsstelle s              -- Buchungs-Stelle
416    ON d.bsgml = s.gml_id
417  JOIN ax_buchungsstelle_buchungsart b  -- EnstschlÃŒsselung der Buchungsart
418    ON s.buchungsart = b.wert
419
420  JOIN alkis_beziehungen v3             -- Buchung --> Grundbuchblatt
421    ON s.gml_id = v3.beziehung_von AND v3.beziehungsart = 'istBestandteilVon'
422  JOIN ax_buchungsblatt  gb
423    ON v3.beziehung_zu = gb.gml_id
424
425  JOIN ax_buchungsblattbezirk z
426    ON gb.land=z.land AND gb.bezirk=z.bezirk
427
428  JOIN alkis_beziehungen v4             -- Blatt  --> NamNum
429    ON v4.beziehung_zu = gb.gml_id AND v4.beziehungsart = 'istBestandteilVon' 
430  JOIN ax_namensnummer nn
431    ON v4.beziehung_von = nn.gml_id
432
433  JOIN alkis_beziehungen v5             -- NamNum --> Person
434   -- 2014-01-20: Mit LEFT ab hier werden auch NumNum-Zeilen mit "Beschreibung der Rechtsgemeinschaft" geliefert (ohne Person)
435    ON v5.beziehung_von = nn.gml_id AND v5.beziehungsart = 'benennt'
436  JOIN ax_person p
437    ON v5.beziehung_zu = p.gml_id
438
439  LEFT JOIN alkis_beziehungen v6        -- Person --> Anschrift
440    ON v6.beziehung_von = p.gml_id AND v6.beziehungsart = 'hat'
441  LEFT JOIN ax_anschrift a
442    ON v6.beziehung_zu = a.gml_id
443
444  -- 2mal "LEFT JOIN" verdoppelt die Zeile in der Ausgabe. Darum als Subquery:
445
446  -- Noch mal "GB -> NamNum", aber dieses Mal fÃŒr "Rechtsgemeinschaft".
447  -- Kommt max. 1 mal je GB vor und hat keine Relation auf Person.
448  LEFT JOIN
449   ( SELECT v7.beziehung_zu,
450            rg.artderrechtsgemeinschaft,
451            rg.beschriebderrechtsgemeinschaft
452       FROM ax_namensnummer rg
453       JOIN alkis_beziehungen v7              -- Blatt  --> NamNum (Rechtsgemeinschaft)
454         ON v7.beziehung_von = rg.gml_id
455      WHERE v7.beziehungsart = 'istBestandteilVon'
456        AND NOT rg.artderrechtsgemeinschaft IS NULL
457   ) AS rg                         -- Rechtsgemeinschaft
458   ON rg.beziehung_zu = gb.gml_id  -- zum GB
459
460  ORDER BY f.flurstueckskennzeichen,
461           gb.bezirk, gb.buchungsblattnummermitbuchstabenerweiterung, s.laufendenummer,
462           nn.laufendenummernachdin1421;
463
464*/
465-- neue Version mit Relationen OHNE die Tabelle "alkis_beziehungen":
466-- +++ ToDo
467
468
469CREATE OR REPLACE VIEW exp_csv_str
470AS
471 SELECT
472    l.stgml,                                             -- Filter: Straßen-GML-ID
473
474  -- FlurstÃŒck
475    f.gml_id                             AS fsgml,       -- Gruppenwechsel fÃŒr "function lage_zum_fs" in alkisexport.php
476    f.flurstueckskennzeichen             AS fs_kennz,
477    f.gemarkungsnummer,                                  -- Teile des FS-Kennz. noch mal einzeln
478    f.flurnummer, f.zaehler, f.nenner,
479    f.amtlicheflaeche                    AS fs_flae,
480    g.bezeichnung                        AS gemarkung,
481
482  -- Grundbuch
483  --gb.gml_id                            AS gbgml,       -- möglicher Filter Grundbuch-GML-ID
484    gb.bezirk                            AS gb_bezirk,
485    gb.buchungsblattnummermitbuchstabenerweiterung AS gb_blatt,
486    z.bezeichnung                        AS beznam,      -- GB-Bezirks-Name
487
488  -- Buchungsstelle (GrundstÃŒck)
489    s.laufendenummer                     AS bu_lfd,      -- BVNR
490    --s.zaehler, s.nenner,                                -- Anteil des GB am FS, einzelne Felder
491    '=' || s.zaehler || '/' || s.nenner  AS bu_ant,      -- als Excel-Formel (nur bei Wohnungsgrundbuch JOIN ÃŒber 'Recht an')
492    s.buchungsart,                                       -- verschlÃŒsselt
493    b.bezeichner                         AS bu_art,      -- Buchungsart entschlÃŒsselt
494
495  -- NamensNummer (Normalfall mit Person)
496    nn.laufendenummernachdin1421         AS nam_lfd,
497    '=' || nn.zaehler|| '/' || nn.nenner AS nam_ant,         -- als Excel-Formel
498
499  -- Rechtsgemeinsachaft (Sonderfall von Namensnummer, ohne Person, ohne Nummer)
500    rg.artderrechtsgemeinschaft          AS nam_adr,
501    rg.beschriebderrechtsgemeinschaft    AS nam_bes,
502
503  -- Person
504  --p.gml_id                             AS psgml,           -- möglicher Filter Personen-GML-ID
505    p.anrede,
506    p.vorname,
507    p.namensbestandteil,
508    p.nachnameoderfirma,                                     -- Familienname
509    p.geburtsdatum,
510    --p.geburtsname, p.akademischergrad
511 
512  -- Adresse der Person
513    a.postleitzahlpostzustellung         AS plz,
514    a.ort_post                           AS ort,             -- Anschreifenzeile 1: PLZ+Ort
515    a.strasse,  a.hausnummer,                                -- Anschriftenzeile 2: Straße+HsNr
516    a.bestimmungsland                    AS land
517
518  FROM ax_flurstueck    f               -- FlurstÃŒck
519
520  JOIN flst_an_strasse  l               -- Lage (hier zusÀtzlicher JOIN gegenÃŒber Version "exp_csv")
521        ON l.fsgml = f.gml_id
522
523  JOIN doppelverbindung d               -- beide FÀlle ÃŒber Union-View: direkt und ÃŒber Recht von Buchung an Buchung
524    ON d.fsgml = f.gml_id
525
526  JOIN ax_gemarkung g                   -- entschlÃŒsseln
527    ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer
528
529  JOIN ax_buchungsstelle s              -- Buchungs-Stelle
530    ON d.bsgml = s.gml_id
531  JOIN ax_buchungsstelle_buchungsart b  -- EnstschlÃŒsselung der Buchungsart
532    ON s.buchungsart = b.wert
533
534  JOIN alkis_beziehungen v3             -- Buchung --> Grundbuchblatt
535    ON s.gml_id = v3.beziehung_von AND v3.beziehungsart = 'istBestandteilVon'
536  JOIN ax_buchungsblatt  gb
537    ON v3.beziehung_zu = gb.gml_id
538
539  JOIN ax_buchungsblattbezirk z
540    ON gb.land=z.land AND gb.bezirk=z.bezirk
541
542  JOIN alkis_beziehungen v4             -- Blatt  --> NamNum
543    ON v4.beziehung_zu = gb.gml_id AND v4.beziehungsart = 'istBestandteilVon' 
544  JOIN ax_namensnummer nn
545    ON v4.beziehung_von = nn.gml_id
546
547  JOIN alkis_beziehungen v5             -- NamNum --> Person
548   -- 2014-01-20: Mit LEFT ab hier werden auch NumNum-Zeilen mit "Beschreibung der Rechtsgemeinschaft" geliefert (ohne Person)
549    ON v5.beziehung_von = nn.gml_id AND v5.beziehungsart = 'benennt'
550  JOIN ax_person p
551    ON v5.beziehung_zu = p.gml_id
552
553  LEFT JOIN alkis_beziehungen v6        -- Person --> Anschrift
554    ON v6.beziehung_von = p.gml_id AND v6.beziehungsart = 'hat'
555  LEFT JOIN ax_anschrift a
556    ON v6.beziehung_zu = a.gml_id
557
558  -- 2mal "LEFT JOIN" verdoppelt die Zeile in der Ausgabe. Darum als Subquery:
559
560  -- Noch mal "GB -> NamNum", aber dieses Mal fÃŒr "Rechtsgemeinschaft".
561  -- Kommt max. 1 mal je GB vor und hat keine Relation auf Person.
562  LEFT JOIN
563   ( SELECT v7.beziehung_zu,
564            rg.artderrechtsgemeinschaft,
565            rg.beschriebderrechtsgemeinschaft
566       FROM ax_namensnummer rg
567       JOIN alkis_beziehungen v7              -- Blatt  --> NamNum (Rechtsgemeinschaft)
568         ON v7.beziehung_von = rg.gml_id
569      WHERE v7.beziehungsart = 'istBestandteilVon'
570        AND NOT rg.artderrechtsgemeinschaft IS NULL
571   ) AS rg                         -- Rechtsgemeinschaft
572   ON rg.beziehung_zu = gb.gml_id  -- zum GB
573
574  ORDER BY f.flurstueckskennzeichen,
575           gb.bezirk, gb.buchungsblattnummermitbuchstabenerweiterung, s.laufendenummer,
576           nn.laufendenummernachdin1421;
577
578COMMENT ON VIEW exp_csv_str
579 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.';
580
581--GRANT SELECT ON TABLE exp_csv_str TO mb27;       -- User fÃŒr Auskunfts-Programme
582--GRANT SELECT ON TABLE exp_csv_str TO alkisbuch;  -- User fÃŒr Auskunfts-Programme RLP-Demo
583
584
585-- Test-Ausgabe:
586--   SELECT * FROM exp_csv_str WHERE stgml='DENW18AL000004Fl' LIMIT 40;
587
588
589-- Analyse: Kann es mehr als 1 "Rechtsgemeinschaft" zu einem GB-Blatt geben?
590-- (Diese Frage stellte sich beim Design des View "exp_csv".)
591-- Schritt 1: alle vorhandenen
592
593/*
594-- alte Version mit Relationen ÃŒber die Tabelle "alkis_beziehungen":
595
596CREATE OR REPLACE VIEW rechtsgemeinschaften_zum_grundbuch
597AS
598 SELECT
599     gb.gml_id,
600     gb.bezirk,
601     gb.buchungsblattnummermitbuchstabenerweiterung AS gb_blatt,
602     nn.artderrechtsgemeinschaft,
603     nn.beschriebderrechtsgemeinschaft
604  FROM ax_buchungsblatt  gb
605  JOIN alkis_beziehungen v
606    ON v.beziehung_zu = gb.gml_id AND v.beziehungsart = 'istBestandteilVon' 
607  JOIN ax_namensnummer nn
608    ON v.beziehung_von = nn.gml_id
609  WHERE NOT nn.artderrechtsgemeinschaft IS NULL
610  ORDER BY gb.bezirk, gb.buchungsblattnummermitbuchstabenerweiterung,
611           nn.laufendenummernachdin1421;
612
613*/
614-- neue Version mit Relationen OHNE die Tabelle "alkis_beziehungen":
615-- +++ ToDo
616
617
618CREATE OR REPLACE VIEW rechtsgemeinschaften_zum_grundbuch
619AS
620 SELECT
621     gb.gml_id,
622     gb.bezirk,
623     gb.buchungsblattnummermitbuchstabenerweiterung AS gb_blatt,
624     nn.artderrechtsgemeinschaft,
625     nn.beschriebderrechtsgemeinschaft
626  FROM ax_buchungsblatt  gb
627  JOIN alkis_beziehungen v
628    ON v.beziehung_zu = gb.gml_id AND v.beziehungsart = 'istBestandteilVon' 
629  JOIN ax_namensnummer nn
630    ON v.beziehung_von = nn.gml_id
631  WHERE NOT nn.artderrechtsgemeinschaft IS NULL
632  ORDER BY gb.bezirk, gb.buchungsblattnummermitbuchstabenerweiterung,
633           nn.laufendenummernachdin1421;
634
635COMMENT ON VIEW rechtsgemeinschaften_zum_grundbuch
636 IS 'Rechtsgemeinschaften zum Grundbuchblatt.';
637
638-- Schritt 2: Wo gibt es mehrere zu einem GB-Blatt
639CREATE OR REPLACE VIEW rechtsgemeinschaften_zaehlen
640AS
641 SELECT gml_id, bezirk, gb_blatt, count(artderrechtsgemeinschaft) AS anzahl
642   FROM rechtsgemeinschaften_zum_grundbuch
643   GROUP BY gml_id, bezirk, gb_blatt
644   HAVING count(artderrechtsgemeinschaft) > 1
645   ORDER BY bezirk, gb_blatt;
646
647COMMENT ON VIEW rechtsgemeinschaften_zaehlen
648 IS 'Rechtsgemeinschaften zum Grundbuchblatt zaehlen. Anzeigen, wenn es mehrere gibt.';
649-- Ja, kann es geben
650
651-- Schritt 3: alle vorhandenen Zeilen anzeigen zu den GB-BlÀttern, bei denen es mehrere gibt.
652CREATE OR REPLACE VIEW rechtsgemeinschaften_mehrfachzeilen
653AS
654 SELECT *
655   FROM rechtsgemeinschaften_zum_grundbuch
656  WHERE gml_id IN (SELECT gml_id FROM rechtsgemeinschaften_zaehlen);
657
658COMMENT ON VIEW rechtsgemeinschaften_mehrfachzeilen
659 IS 'GrundbuchblÀtter mit mehr als einer Zeile Rechtsgemeinschaft.';
660-- Fazit:
661-- Man findet einige wenige identische oder Àhnlich aussehende Zeilen zu einem Grundbuch.
662-- Das sieht also eher nach einem PostNAS-FortfÌhrungsproblem aus, als nach unabhÀngigen Zeilen.
663-- Wurde hier eine Relation nicht sauber gelöscht?
664
665
666-- Welche Karten-Typen ?
667CREATE OR REPLACE VIEW kartentypen_der_texte_fuer_hnr
668AS
669   SELECT DISTINCT advstandardmodell
670   FROM ap_pto p
671   WHERE p.art = 'HNR';
672COMMENT ON VIEW kartentypen_der_texte_fuer_hnr
673  IS 'Datenanalyse: Kartentypen in Tabelle ap_pto fÃŒr Hausnummern.';
674
675-- Dies liefert:
676--  "{DKKM1000}"
677--  "{DKKM1000,DKKM500}"
678--  "{DKKM500}"
679--  NULL
680
681-- Texte, die NICHT dargestellt werden sollen.
682-- -------------------------------------------
683-- Texte und Text-Fragmente aus der Konvertierung ALK+ALB, die noch nicht gelöscht worden sind.
684CREATE OR REPLACE VIEW ap_pto_muell
685AS
686  SELECT p.ogc_fid,
687         p.schriftinhalt,
688         p.art,
689         p.drehwinkel * 57.296 AS winkel, -- * 180 / Pi
690         p.wkb_geometry
691    FROM ap_pto p
692   WHERE not p.schriftinhalt IS NULL
693     AND p.endet IS NULL
694     AND p.art IN ('AOG_AUG','PNR');
695
696COMMENT ON VIEW ap_pto_muell
697 IS 'Datenanalyse: Beschriftungen aus "ap_pto", die NICHT dargestellt werden sollen.';
698
699
700-- FlurstÃŒcke mit Anzeige der FlurstÃŒcksnummer an der "Standardposition"
701
702-- Nach der Konvertierung aus ALK hat zunÀchst jedes FlurstÌck eine explizit gesetzte Position der FlurstÌcksnummer.
703
704-- Nach einer manuellen Teilung bekommen die neuen FlurstÃŒcke im ALKIS nur dann eine Position,
705-- wenn die Positioin manuell bestimmt (verschoben) wurde.
706-- Wenn die FlurstÃŒcksnummer an ihrer "Standardposition" angezeigt werden soll,
707-- dann wird diese in den Daten (DHK, NAS) nicht gesetzt.
708-- Der Konverter PostNAS konvertiert aber nur die Daten, die er bekommt, er setzt nicht die Standard-Position
709-- fÃŒr die FlurstÃŒcke, die ohne eine manuelle Position kommen.
710
711-- Diese FÀlle identifizieren
712
713/*
714-- alte Version mit Relationen ÃŒber die Tabelle "alkis_beziehungen":
715
716CREATE OR REPLACE VIEW flstnr_ohne_position
717AS
718 SELECT f.gml_id,
719        f.gemarkungsnummer || '-' || f.flurnummer || '-' || f.zaehler::text || COALESCE ('/' || f.nenner::text, '') AS such -- Suchstring fÃŒr ALKIS-Navigation nach FS-Kennzeichen
720 FROM        ax_flurstueck     f
721   LEFT JOIN alkis_beziehungen v  ON v.beziehung_zu = f.gml_id
722 --LEFT JOIN ap_pto            p  ON p.gml_id       = v.beziehung_von
723  WHERE v.beziehungsart is NULL
724    AND f.endet IS NULL
725--ORDER BY f.gemarkungsnummer, f.flurnummer, f.zaehler
726  ;
727
728*/
729-- neue Version mit Relationen OHNE die Tabelle "alkis_beziehungen":
730-- +++ ToDo
731
732
733CREATE OR REPLACE VIEW flstnr_ohne_position
734AS
735 SELECT f.gml_id,
736        f.gemarkungsnummer || '-' || f.flurnummer || '-' || f.zaehler::text || COALESCE ('/' || f.nenner::text, '') AS such -- Suchstring fÃŒr ALKIS-Navigation nach FS-Kennzeichen
737 FROM        ax_flurstueck     f
738   LEFT JOIN alkis_beziehungen v  ON v.beziehung_zu = f.gml_id
739 --LEFT JOIN ap_pto            p  ON p.gml_id       = v.beziehung_von
740  WHERE v.beziehungsart is NULL
741    AND f.endet IS NULL
742--ORDER BY f.gemarkungsnummer, f.flurnummer, f.zaehler
743  ;
744
745COMMENT ON VIEW flstnr_ohne_position IS 'Sicht fÌr Datenanalyse: FlurstÌcke ohne manuell gesetzte Position fÌr die PrÀsentation der FS-Nr';
746
747
748-- Umbruch im Label? z.B. "Schwimm-/nbecken"
749-- Sind 2 Buchstaben in Mapfile bei "WRAP" möglich?
750CREATE OR REPLACE VIEW texte_mit_umbruch
751AS
752 SELECT ogc_fid, schriftinhalt, art
753   FROM ap_pto
754  WHERE not schriftinhalt is null
755    AND schriftinhalt like '%/n%';
756
757COMMENT ON VIEW texte_mit_umbruch
758 IS 'Sicht fÃŒr Datenanalyse: Vorkommen eines Umbruchs im Label-Text.';
759
760-- EXTENT fÃŒr das Mapfile eines Mandanten ermitteln
761CREATE OR REPLACE VIEW flurstuecks_minmax AS
762 SELECT min(st_xmin(wkb_geometry)) AS r_min,
763        min(st_ymin(wkb_geometry)) AS h_min,
764        max(st_xmax(wkb_geometry)) AS r_max,
765        max(st_ymax(wkb_geometry)) AS h_max
766   FROM ax_flurstueck f
767   WHERE f.endet IS NULL;
768
769COMMENT ON VIEW flurstuecks_minmax
770 IS 'Sicht fÃŒr Datenanalyse: Maximale Ausdehnung von ax_flurstueck fuer EXTENT-Angabe im Mapfile.';
771
772-- Nach Laden der Keytables:
773CREATE OR REPLACE VIEW baurecht
774AS
775  SELECT r.ogc_fid,
776         r.wkb_geometry,
777         r.gml_id,
778         r.artderfestlegung as adfkey, -- Art der Festlegung - Key
779         r."name",                     -- Eigenname des Gebietes
780         r.stelle,                     -- Stelle Key
781         r.bezeichnung AS rechtbez,    -- Verfahrensnummer
782         a.bezeichner  AS adfbez,      -- Art der Festlegung - Bezeichnung
783         d.bezeichnung AS stellbez     -- Stelle Bezeichnung
784      -- , d.stellenart                -- weiter entschluesseln?
785    FROM ax_bauraumoderbodenordnungsrecht r
786    LEFT JOIN ax_bauraumoderbodenordnungsrecht_artderfestlegung a
787      ON r.artderfestlegung = a.wert
788    LEFT JOIN ax_dienststelle d
789      ON r.land   = d.land
790     AND r.stelle = d.stelle
791  WHERE r.endet IS NULL AND d.endet IS NULL ;
792
793COMMENT ON VIEW baurecht
794 IS 'Datenanalyse: EnstschlÃŒsselte Felder zu einer FlÀche des Baurechts.';
795
796-- Man glaubt es kaum, aber im ALKIS haben Gemeinde und Gemarkung keinerlei Beziehung miteinander
797-- Nur durch Auswertung der FlurstÃŒcke kann man ermitteln, in welcher Gemeinde eine Gemarkung liegt.
798CREATE OR REPLACE VIEW gemarkung_in_gemeinde
799AS
800  SELECT DISTINCT land, regierungsbezirk, kreis, gemeinde, gemarkungsnummer
801  FROM            ax_flurstueck
802  WHERE           endet IS NULL
803  ORDER BY        land, regierungsbezirk, kreis, gemeinde, gemarkungsnummer;
804
805COMMENT ON VIEW gemarkung_in_gemeinde
806 IS 'Welche Gemarkung liegt in welcher Gemeinde? Durch Verweise aus FlurstÃŒck.';
807
808
809-- Untersuchen, welche Geometrie-Typen vorkommen
810CREATE OR REPLACE VIEW arten_von_flurstuecksgeometrie
811AS
812 SELECT   count(gml_id) as anzahl,
813          st_geometrytype(wkb_geometry)
814 FROM     ax_flurstueck
815 WHERE    endet IS NULL
816 GROUP BY st_geometrytype(wkb_geometry);
817
818COMMENT ON VIEW arten_von_flurstuecksgeometrie IS 'Datenanalyse: vorkommende Geometry-Typen in Tabelle ax_flurstueck.';
819
820
821-- A d r e s s e n
822
823-- Verschluesselte Lagebezeichnung (Strasse und Hausnummer) fuer eine Gemeinde
824-- Schluessel der Gemeinde nach Bedarf anpassen!
825CREATE OR REPLACE VIEW adressen_hausnummern
826AS
827    SELECT
828        s.bezeichnung AS strassenname,
829        g.bezeichnung AS gemeindename,
830        l.land,
831        l.regierungsbezirk,
832        l.kreis,
833        l.gemeinde,
834        l.lage        AS strassenschluessel,
835        l.hausnummer
836    FROM   ax_lagebezeichnungmithausnummer l 
837    JOIN   ax_gemeinde g
838      ON l.kreis=g.kreis
839     AND l.gemeinde=g.gemeinde
840    JOIN   ax_lagebezeichnungkatalogeintrag s
841      ON l.kreis=s.kreis
842     AND l.gemeinde=s.gemeinde
843     AND l.lage = s.lage
844    WHERE l.gemeinde = 40;  -- "40" = Stadt Lage
845
846COMMENT ON VIEW adressen_hausnummern IS 'Datenanalyse: VerschlÃŒsselte Lagebezeichnung (Straße und Hausnummer) fÃŒr eine Gemeinde. SchlÃŒssel der Gemeinde nach Bedarf anpassen.';
847
848-- Zuordnung dieser Adressen zu Flurstuecken
849-- Schluessel der Gemeinde nach Bedarf anpassen!
850
851/*
852-- alte Version mit Relationen ÃŒber die Tabelle "alkis_beziehungen":
853
854CREATE OR REPLACE VIEW adressen_zum_flurstueck
855AS
856    SELECT
857           f.gemarkungsnummer,
858           f.flurnummer,
859           f.zaehler,
860           f.nenner,
861           g.bezeichnung AS gemeindename,
862           s.bezeichnung AS strassenname,
863           l.lage        AS strassenschluessel,
864           l.hausnummer
865      FROM   ax_flurstueck f
866      JOIN   alkis_beziehungen v
867        ON f.gml_id=v.beziehung_von
868      JOIN   ax_lagebezeichnungmithausnummer l 
869        ON l.gml_id=v.beziehung_zu
870      JOIN   ax_gemeinde g
871        ON l.kreis=g.kreis
872       AND l.gemeinde=g.gemeinde
873      JOIN   ax_lagebezeichnungkatalogeintrag s
874        ON l.kreis=s.kreis
875       AND l.gemeinde=s.gemeinde
876       AND l.lage = s.lage
877     WHERE v.beziehungsart='weistAuf'
878       AND l.gemeinde = 40  -- "40" = Stadt Lage
879     ORDER BY f.gemarkungsnummer, f.flurnummer, f.zaehler, f.nenner;
880
881*/
882-- neue Version mit Relationen OHNE die Tabelle "alkis_beziehungen":
883-- +++ ToDo
884
885CREATE OR REPLACE VIEW adressen_zum_flurstueck
886AS
887    SELECT
888           f.gemarkungsnummer,
889           f.flurnummer,
890           f.zaehler,
891           f.nenner,
892           g.bezeichnung AS gemeindename,
893           s.bezeichnung AS strassenname,
894           l.lage        AS strassenschluessel,
895           l.hausnummer
896      FROM   ax_flurstueck f
897      JOIN   alkis_beziehungen v
898        ON f.gml_id=v.beziehung_von
899      JOIN   ax_lagebezeichnungmithausnummer l 
900        ON l.gml_id=v.beziehung_zu
901      JOIN   ax_gemeinde g
902        ON l.kreis=g.kreis
903       AND l.gemeinde=g.gemeinde
904      JOIN   ax_lagebezeichnungkatalogeintrag s
905        ON l.kreis=s.kreis
906       AND l.gemeinde=s.gemeinde
907       AND l.lage = s.lage
908     WHERE v.beziehungsart='weistAuf'
909       AND l.gemeinde = 40  -- "40" = Stadt Lage
910     ORDER BY f.gemarkungsnummer, f.flurnummer, f.zaehler, f.nenner;
911
912COMMENT ON VIEW adressen_zum_flurstueck IS 'Datenanalyse: Zuordnung von Adressen zu Flurstuecken. SchlÃŒssel der Gemeinde nach Bedarf anpassen.';
913
914-- Punktförmige  P r À s e n t a t i o n s o b j e k t e  (ap_pto)
915-- Ermittlung der vorkommenden Arten
916CREATE OR REPLACE VIEW beschriftung_was_kommt_vor
917AS
918  SELECT DISTINCT art, horizontaleausrichtung, vertikaleausrichtung
919    FROM ap_pto
920   WHERE not schriftinhalt is null
921  ORDER BY art;
922
923COMMENT ON VIEW beschriftung_was_kommt_vor IS 'Analyse der vorkommenden Kombinationen in ap_pto (Beschriftung)';
924
925-- Ergebnis:
926-- 2013: PostNAS 0.7  (aus 150,260,340)
927-- ------------------
928--      "AOG_AUG"                               "zentrisch";"Basis"  - Schriftinhalkt immer nur "I" ?
929--      "BWF"                                   "zentrisch";"Basis"/"zentrisch";"Mitte"
930--      "BWF_ZUS"                               "zentrisch";"Basis"
931--      "FKT"                                   "zentrisch";"Basis"/"linksbÃŒndig";"Basis"/"zentrisch";"Mitte"
932--      "FKT_TEXT"                              "zentrisch";"Mitte"
933--      "FreierText"                    "zentrisch";"Basis"/"zentrisch";"Mitte"/"linksbÃŒndig";"Basis"
934--      "FreierTextHHO"                 "zentrisch";"Mitte"
935--      "Friedhof"                              "zentrisch";"Basis"
936--      "Gewanne"                               "zentrisch";"Basis"/"zentrisch";"Mitte"
937--      "GFK"                                   "zentrisch";"Basis"/"zentrisch";"Mitte"
938--      "HNR"                                   "zentrisch";"Basis"/"linksbÃŒndig";"Basis"/"zentrisch";"Mitte"  --> Hausnummer, group gebaeude
939--      "HHO"                                   "zentrisch";"Mitte"  -- HHO = objekthoehe zu ax_gebaeude?
940--      "NAM"                                   "zentrisch";"Basis"/"zentrisch";"Mitte"/"linksbÃŒndig";"Basis"
941--      "SPO"                                   "zentrisch";"Basis"/
942--      "Vorratsbehaelter"              "zentrisch";"Basis"
943--      "WeitereHoehe"                  "zentrisch";"Mitte"
944--      "ZAE_NEN"                               "zentrisch";"Basis"
945--      "ZNM"                                   "zentrisch";"Basis"/"linksbÃŒndig";"Basis"
946
947--* Layer "ap_pto_stra"
948--                          hor ; ver / hor ; ver
949--      "BezKlassifizierungStrasse" "zent.";"Basis"     / "linksbÃŒndig";"Basis"
950--      "Platz"                                 "zentrisch";"Basis" / "zentrisch";"Mitte"
951--      "Strasse"                               "zentrisch";"Basis" / "zentrisch";"Mitte" / "linksbÃŒndig";"Basis"
952--      "Weg"                                   "zentrisch";"Basis" / "zentrisch";"Mitte" / "linksbÃŒndig";"Basis"
953
954--* geplanter layer "ap_pto_wasser"
955--      "StehendesGewaesser"    "zentrisch";"Basis"
956--      "Fliessgewaesser"               "zentrisch";"Basis"/"linksbÃŒndig";"Basis"
957
958
959-- FlurstÃŒcke eines EigentÃŒmers
960-- ----------------------------
961
962-- Dieser View liefert nur die (einfache) Buchungsart "GrundstÃŒck"
963-- Solche FÀlle wie "Erbbaurecht an GrundstÌck" oder "Wohnungs-/Teileigentum an aufgeteiltes GrundstÌck"
964-- oder "Miteigentum an aufteteiltes GrundstÃŒck" fehlen in deisere Auswertung.
965-- Dazu siehe: "rechte_eines_eigentuemers".
966
967-- Das Ergbenis ist gedacht fÃŒr den Export als CSV und Weiterverarbeitung mit einer Tabellenkalkulation
968-- oder einer einfachen Datenbank.
969
970-- Auch ein Export als Shape ist moeglich (dafuer: geom hinzugefuegt, Feldnamen gekuerzt)
971-- Kommando:
972--  pgsql2shp -h localhost -p 5432 -f "/data/.../alkis_fs_gemeinde.shp"  [db-name]  public.flurstuecke_eines_eigentuemers
973
974-- Übersicht der Tabellen:
975--
976-- Person <benennt< NamNum. >istBestandteilVon> Blatt <istBestandteilVon< Stelle >istGebucht> Flurstueck
977--                                              *-> Bezirk                *-> Buchungsart     *-> Gemarkung
978
979-- Wobei ">xxx>" = JOIN ÃŒber die Verbindungs-Tabelle "alkis_beziehungen" mit der Beziehungsart "xxx".
980
981
982/*
983-- alte Version mit Relationen ÃŒber die Tabelle "alkis_beziehungen":
984
985CREATE OR REPLACE VIEW flurstuecke_eines_eigentuemers
986AS
987   SELECT
988      k.bezeichnung                AS gemarkung,
989      k.gemarkungsnummer           AS gemkg_nr,
990      f.flurnummer                 AS flur,
991      f.zaehler                    AS fs_zaehler,
992      f.nenner                     AS fs_nenner,
993      f.amtlicheflaeche            AS flaeche,
994      f.wkb_geometry               AS geom,  -- fuer Export als Shape
995   -- g.bezirk,
996      b.bezeichnung                AS bezirkname,
997      g.buchungsblattnummermitbuchstabenerweiterung AS gb_blatt,
998      g.blattart,
999      s.laufendenummer             AS bvnr,
1000      art.bezeichner               AS buchgsart,
1001   -- s.zaehler || '/' || s.nenner AS buchg_anteil,
1002      n.laufendenummernachdin1421  AS name_num,
1003   -- n.zaehler || '/' || n.nenner AS nam_anteil,
1004      p.nachnameoderfirma          AS nachname --,
1005   -- p.vorname
1006   FROM       ax_person              p
1007        JOIN  alkis_beziehungen      bpn  ON bpn.beziehung_zu  = p.gml_id
1008        JOIN  ax_namensnummer        n    ON bpn.beziehung_von =n.gml_id
1009        JOIN  alkis_beziehungen      bng  ON n.gml_id = bng.beziehung_von
1010        JOIN  ax_buchungsblatt       g    ON bng.beziehung_zu = g.gml_id
1011        JOIN  ax_buchungsblattbezirk b    ON g.land = b.land AND g.bezirk = b.bezirk
1012        JOIN  alkis_beziehungen      bgs  ON bgs.beziehung_zu = g.gml_id
1013        JOIN  ax_buchungsstelle      s    ON s.gml_id = bgs.beziehung_von
1014        JOIN  ax_buchungsstelle_buchungsart art ON s.buchungsart = art.wert
1015        JOIN  alkis_beziehungen      bsf  ON bsf.beziehung_zu = s.gml_id
1016        JOIN  ax_flurstueck          f    ON f.gml_id = bsf.beziehung_von
1017        JOIN  ax_gemarkung           k    ON f.land = k.land AND f.gemarkungsnummer = k.gemarkungsnummer
1018   WHERE p.nachnameoderfirma LIKE 'Gemeinde %'   -- ** Bei Bedarf anpassen!
1019     AND bpn.beziehungsart = 'benennt'           -- Namennummer     >> Person
1020     AND bng.beziehungsart = 'istBestandteilVon' -- Namensnummer    >> Grundbuch
1021     AND bgs.beziehungsart = 'istBestandteilVon' -- Buchungs-Stelle >> Grundbuch
1022     AND bsf.beziehungsart = 'istGebucht'        -- Flurstueck      >> Buchungs-Stelle
1023     AND p.endet IS NULL AND n.endet IS NULL AND g.endet IS NULL AND b.endet IS NULL
1024     AND s.endet IS NULL AND f.endet IS NULL AND k.endet IS NULL
1025   ORDER BY k.bezeichnung, f.flurnummer, f.zaehler, f.nenner, g.bezirk, g.buchungsblattnummermitbuchstabenerweiterung, s.laufendenummer;
1026
1027
1028*/
1029-- neue Version mit Relationen OHNE die Tabelle "alkis_beziehungen":
1030-- +++ ToDo
1031
1032CREATE OR REPLACE VIEW flurstuecke_eines_eigentuemers
1033AS
1034   SELECT
1035      k.bezeichnung                AS gemarkung,
1036      k.gemarkungsnummer           AS gemkg_nr,
1037      f.flurnummer                 AS flur,
1038      f.zaehler                    AS fs_zaehler,
1039      f.nenner                     AS fs_nenner,
1040      f.amtlicheflaeche            AS flaeche,
1041      f.wkb_geometry               AS geom,  -- fuer Export als Shape
1042   -- g.bezirk,
1043      b.bezeichnung                AS bezirkname,
1044      g.buchungsblattnummermitbuchstabenerweiterung AS gb_blatt,
1045      g.blattart,
1046      s.laufendenummer             AS bvnr,
1047      art.bezeichner               AS buchgsart,
1048   -- s.zaehler || '/' || s.nenner AS buchg_anteil,
1049      n.laufendenummernachdin1421  AS name_num,
1050   -- n.zaehler || '/' || n.nenner AS nam_anteil,
1051      p.nachnameoderfirma          AS nachname --,
1052   -- p.vorname
1053   FROM       ax_person              p
1054        JOIN  alkis_beziehungen      bpn  ON bpn.beziehung_zu  = p.gml_id
1055        JOIN  ax_namensnummer        n    ON bpn.beziehung_von =n.gml_id
1056        JOIN  alkis_beziehungen      bng  ON n.gml_id = bng.beziehung_von
1057        JOIN  ax_buchungsblatt       g    ON bng.beziehung_zu = g.gml_id
1058        JOIN  ax_buchungsblattbezirk b    ON g.land = b.land AND g.bezirk = b.bezirk
1059        JOIN  alkis_beziehungen      bgs  ON bgs.beziehung_zu = g.gml_id
1060        JOIN  ax_buchungsstelle      s    ON s.gml_id = bgs.beziehung_von
1061        JOIN  ax_buchungsstelle_buchungsart art ON s.buchungsart = art.wert
1062        JOIN  alkis_beziehungen      bsf  ON bsf.beziehung_zu = s.gml_id
1063        JOIN  ax_flurstueck          f    ON f.gml_id = bsf.beziehung_von
1064        JOIN  ax_gemarkung           k    ON f.land = k.land AND f.gemarkungsnummer = k.gemarkungsnummer
1065   WHERE p.nachnameoderfirma LIKE 'Gemeinde %'   -- ** Bei Bedarf anpassen!
1066     AND bpn.beziehungsart = 'benennt'           -- Namennummer     >> Person
1067     AND bng.beziehungsart = 'istBestandteilVon' -- Namensnummer    >> Grundbuch
1068     AND bgs.beziehungsart = 'istBestandteilVon' -- Buchungs-Stelle >> Grundbuch
1069     AND bsf.beziehungsart = 'istGebucht'        -- Flurstueck      >> Buchungs-Stelle
1070     AND p.endet IS NULL AND n.endet IS NULL AND g.endet IS NULL AND b.endet IS NULL
1071     AND s.endet IS NULL AND f.endet IS NULL AND k.endet IS NULL
1072   ORDER BY k.bezeichnung, f.flurnummer, f.zaehler, f.nenner, g.bezirk, g.buchungsblattnummermitbuchstabenerweiterung, s.laufendenummer;
1073
1074COMMENT ON VIEW flurstuecke_eines_eigentuemers IS 'Muster fÃŒr Export: Suchkriteriumnach Bedarf anpassen.';
1075
1076-- Rechte eines EigentÃŒmers
1077-- ------------------------
1078-- Dieser View sucht speziell die FÀlle wo eine Buchungsstelle ein Recht "an" einer anderen Buchungsstelle hat.
1079--  - "Erbbaurecht *an* GrundstÃŒck"
1080--  - "Wohnungs-/Teileigentum *an* Aufgeteiltes GrundstÃŒck"
1081--  - "Miteigentum *an* Aufteteiltes GrundstÃŒck"
1082-- Suchkriterium ist der Name des EigentÃŒmers auf dem "herrschenden" Grundbuch, also dem Besitzer des Rechtes.
1083
1084-- Diese FÀlle fehlen im View "flurstuecke_eines_eigentuemers".
1085
1086-- Übersicht der Tabellen:
1087-- Person <benennt< NamNum. >istBestandteilVon> Blatt <istBestandteilVon< Stelle-h >an> Stelle-d >istGebucht> Flurstueck
1088-- Wobei ">xxx>" = JOIN ÃŒber die Verbindungs-Tabelle "alkis_beziehungen" mit der Beziehungsart "xxx".
1089
1090
1091/*
1092-- alte Version mit Relationen ÃŒber die Tabelle "alkis_beziehungen":
1093
1094CREATE OR REPLACE VIEW rechte_eines_eigentuemers
1095AS
1096   SELECT
1097      k.bezeichnung                AS gemarkung,
1098      k.gemarkungsnummer           AS gemkg_nr,
1099      f.flurnummer                 AS flur,
1100      f.zaehler                    AS fs_zaehler,
1101      f.nenner                     AS fs_nenner,
1102      f.amtlicheflaeche            AS flaeche,
1103      f.wkb_geometry               AS geom,  -- fuer Export als Shape
1104   -- g.bezirk,
1105      b.bezeichnung                AS bezirkname,
1106      g.buchungsblattnummermitbuchstabenerweiterung AS gb_blatt,
1107   -- g.blattart,
1108      sh.laufendenummer            AS bvnr_herr,
1109      sh.zaehler || '/' || sh.nenner AS buchg_anteil_herr,
1110      arth.bezeichner              AS buchgsa_herr,
1111      bss.beziehungsart            AS bez_art,
1112      artd.bezeichner              AS buchgsa_dien,
1113      sd.laufendenummer            AS bvnr_dien,
1114   -- sd.zaehler || '/' || sd.nenner AS buchg_anteil_dien,
1115      n.laufendenummernachdin1421  AS name_num,
1116   -- n.zaehler || '/' || n.nenner AS nam_anteil,
1117      p.nachnameoderfirma          AS nachname --, 
1118   -- p.vorname
1119   FROM       ax_person              p
1120        JOIN  alkis_beziehungen      bpn  ON bpn.beziehung_zu  = p.gml_id
1121        JOIN  ax_namensnummer        n    ON bpn.beziehung_von =n.gml_id
1122        JOIN  alkis_beziehungen      bng  ON n.gml_id = bng.beziehung_von
1123        JOIN  ax_buchungsblatt       g    ON bng.beziehung_zu = g.gml_id
1124        JOIN  ax_buchungsblattbezirk b    ON g.land = b.land AND g.bezirk = b.bezirk
1125        JOIN  alkis_beziehungen      bgs  ON bgs.beziehung_zu = g.gml_id
1126        JOIN  ax_buchungsstelle      sh   ON sh.gml_id = bgs.beziehung_von  -- herrschende Buchung
1127        JOIN  ax_buchungsstelle_buchungsart arth ON sh.buchungsart = arth.wert
1128        JOIN  alkis_beziehungen      bss  ON sh.gml_id = bss.beziehung_von
1129        JOIN  ax_buchungsstelle      sd   ON sd.gml_id = bss.beziehung_zu   -- dienende Buchung
1130        JOIN  ax_buchungsstelle_buchungsart artd ON sd.buchungsart = artd.wert
1131        JOIN  alkis_beziehungen      bsf  ON bsf.beziehung_zu = sd.gml_id
1132        JOIN  ax_flurstueck          f    ON f.gml_id = bsf.beziehung_von
1133        JOIN  ax_gemarkung           k    ON f.land = k.land AND f.gemarkungsnummer = k.gemarkungsnummer
1134   WHERE p.nachnameoderfirma LIKE 'Stadt %'   -- ** Bei Bedarf anpassen!
1135     AND bpn.beziehungsart = 'benennt'           -- Namennummer     >> Person
1136     AND bng.beziehungsart = 'istBestandteilVon' -- Namensnummer    >> Grundbuch
1137     AND bgs.beziehungsart = 'istBestandteilVon' -- B-Stelle herr   >> Grundbuch
1138     AND bss.beziehungsart in ('an','zu')        -- B-Stelle herr.  >> B-Stelle dien.
1139     AND bsf.beziehungsart = 'istGebucht'        -- Flurstueck      >> B-Stelle dien
1140     AND p.endet IS NULL AND n.endet IS NULL AND g.endet IS NULL AND b.endet IS NULL
1141     AND sh.endet IS NULL AND sd.endet IS NULL AND f.endet IS NULL AND k.endet IS NULL
1142   ORDER BY k.bezeichnung, f.flurnummer, f.zaehler, f.nenner, g.bezirk, g.buchungsblattnummermitbuchstabenerweiterung, sh.laufendenummer;
1143
1144
1145*/
1146-- neue Version mit Relationen OHNE die Tabelle "alkis_beziehungen":
1147
1148CREATE OR REPLACE VIEW rechte_eines_eigentuemers
1149AS
1150   SELECT
1151      k.bezeichnung                AS gemarkung,
1152      k.gemarkungsnummer           AS gemkg_nr,
1153      f.flurnummer                 AS flur,
1154      f.zaehler                    AS fs_zaehler,
1155      f.nenner                     AS fs_nenner,
1156      f.amtlicheflaeche            AS flaeche,
1157      f.wkb_geometry               AS geom,  -- fuer Export als Shape
1158   -- g.bezirk,
1159      b.bezeichnung                AS bezirkname,
1160      g.buchungsblattnummermitbuchstabenerweiterung AS gb_blatt,
1161   -- g.blattart,
1162      sh.laufendenummer            AS bvnr_herr,
1163      sh.zaehler || '/' || sh.nenner AS buchg_anteil_herr,
1164      arth.bezeichner              AS buchgsa_herr,
1165      bss.beziehungsart            AS bez_art,
1166      artd.bezeichner              AS buchgsa_dien,
1167      sd.laufendenummer            AS bvnr_dien,
1168   -- sd.zaehler || '/' || sd.nenner AS buchg_anteil_dien,
1169      n.laufendenummernachdin1421  AS name_num,
1170   -- n.zaehler || '/' || n.nenner AS nam_anteil,
1171      p.nachnameoderfirma          AS nachname --, 
1172   -- p.vorname
1173   FROM       ax_person              p
1174        JOIN  alkis_beziehungen      bpn  ON bpn.beziehung_zu  = p.gml_id
1175        JOIN  ax_namensnummer        n    ON bpn.beziehung_von =n.gml_id
1176        JOIN  alkis_beziehungen      bng  ON n.gml_id = bng.beziehung_von
1177        JOIN  ax_buchungsblatt       g    ON bng.beziehung_zu = g.gml_id
1178        JOIN  ax_buchungsblattbezirk b    ON g.land = b.land AND g.bezirk = b.bezirk
1179        JOIN  alkis_beziehungen      bgs  ON bgs.beziehung_zu = g.gml_id
1180        JOIN  ax_buchungsstelle      sh   ON sh.gml_id = bgs.beziehung_von  -- herrschende Buchung
1181        JOIN  ax_buchungsstelle_buchungsart arth ON sh.buchungsart = arth.wert
1182        JOIN  alkis_beziehungen      bss  ON sh.gml_id = bss.beziehung_von
1183        JOIN  ax_buchungsstelle      sd   ON sd.gml_id = bss.beziehung_zu   -- dienende Buchung
1184        JOIN  ax_buchungsstelle_buchungsart artd ON sd.buchungsart = artd.wert
1185        JOIN  alkis_beziehungen      bsf  ON bsf.beziehung_zu = sd.gml_id
1186        JOIN  ax_flurstueck          f    ON f.gml_id = bsf.beziehung_von
1187        JOIN  ax_gemarkung           k    ON f.land = k.land AND f.gemarkungsnummer = k.gemarkungsnummer
1188   WHERE p.nachnameoderfirma LIKE 'Stadt %'   -- ** Bei Bedarf anpassen!
1189     AND bpn.beziehungsart = 'benennt'           -- Namennummer     >> Person
1190     AND bng.beziehungsart = 'istBestandteilVon' -- Namensnummer    >> Grundbuch
1191     AND bgs.beziehungsart = 'istBestandteilVon' -- B-Stelle herr   >> Grundbuch
1192     AND bss.beziehungsart in ('an','zu')        -- B-Stelle herr.  >> B-Stelle dien.
1193     AND bsf.beziehungsart = 'istGebucht'        -- Flurstueck      >> B-Stelle dien
1194     AND p.endet IS NULL AND n.endet IS NULL AND g.endet IS NULL AND b.endet IS NULL
1195     AND sh.endet IS NULL AND sd.endet IS NULL AND f.endet IS NULL AND k.endet IS NULL
1196   ORDER BY k.bezeichnung, f.flurnummer, f.zaehler, f.nenner, g.bezirk, g.buchungsblattnummermitbuchstabenerweiterung, sh.laufendenummer;
1197
1198COMMENT ON VIEW rechte_eines_eigentuemers IS 'Muster fÌr Export: Suchkriteriumnach Bedarf anpassen. Dies ergÀnzt "flurstuecke_eines_eigentuemers" um die FÀlle mit besonderen Buchungen.';
1199
1200-- Die 2 Views nur fuer Entwicklung:
1201
1202--      CREATE OR REPLACE VIEW beziehungen_redundant
1203--      AS
1204--       SELECT *
1205--         FROM alkis_beziehungen AS bezalt
1206--         WHERE EXISTS
1207--                 (SELECT ogc_fid
1208--                       FROM alkis_beziehungen AS bezneu
1209--                      WHERE bezalt.beziehung_von = bezneu.beziehung_von
1210--                        AND bezalt.beziehung_zu  = bezneu.beziehung_zu
1211--                        AND bezalt.beziehungsart = bezneu.beziehungsart
1212--                        AND bezalt.ogc_fid       < bezneu.ogc_fid
1213--                      );
1214--      COMMENT ON VIEW beziehungen_redundant IS 'Datenanalyse: alkis_beziehungen zu denen es eine identische neue Version gibt. Fehlersuche bei PostNAS-Trigger fÃŒr Replace.';
1215--
1216--      CREATE OR REPLACE VIEW beziehungen_redundant_in_delete
1217--      AS
1218--      SELECT *
1219--       FROM alkis_beziehungen AS bezalt
1220--       WHERE EXISTS
1221--                 (SELECT ogc_fid
1222--                       FROM alkis_beziehungen AS bezneu
1223--                      WHERE bezalt.beziehung_von = bezneu.beziehung_von
1224--                        AND bezalt.beziehung_zu  = bezneu.beziehung_zu
1225--                        AND bezalt.beziehungsart = bezneu.beziehungsart
1226--                        AND bezalt.ogc_fid       < bezneu.ogc_fid
1227--                      )
1228--               -- mit dem Zusatz nur die Faelle aus dem letzten Durchlauf,
1229--               -- die aktuell noch in der Delete-Tabelle stehen
1230--               AND EXISTS
1231--                      (SELECT ogc_fid
1232--                       FROM delete
1233--                       WHERE bezalt.beziehung_von = substr(featureid, 1, 16)
1234--                              OR bezalt.beziehung_zu  = substr(featureid, 1, 16)
1235--                      );
1236--      COMMENT ON VIEW beziehungen_redundant_in_delete IS 'Datenanalyse: alkis_beziehungen zu denen es eine identische neue Version gibt und wo das Objekt noch in der delete-Tabelle vorkommt. Fehlersuche bei PostNAS-Trigger fÃŒr Replace.';
1237
1238
1239-- Suche nach Fehler durch "Replace"
1240-- Wenn ax_flurstueck ÃŒber "replace" ausgetauscht wird und dabei gleichzeitig eine andere
1241-- Buchungsstelle bekommt, dann bleibt die alte Buchungsstelle in den alkis_beziehungen.
1242-- Mail PostNAS Mailingliste von 2013-02-20
1243
1244/*
1245-- alte Version mit Relationen ÃŒber die Tabelle "alkis_beziehungen":
1246
1247CREATE OR REPLACE VIEW mehrfache_buchung_zu_fs
1248AS
1249  SELECT f.gml_id, count(b.ogc_fid) AS anzahl
1250    FROM ax_flurstueck f
1251    JOIN alkis_beziehungen b
1252      ON f.gml_id = b.beziehung_von
1253  WHERE b.beziehungsart = 'istGebucht'
1254  GROUP BY f.gml_id
1255  HAVING count(b.ogc_fid) > 1;
1256
1257*/
1258-- neue Version mit Relationen OHNE die Tabelle "alkis_beziehungen":
1259-- +++ ToDo
1260
1261CREATE OR REPLACE VIEW mehrfache_buchung_zu_fs
1262AS
1263  SELECT f.gml_id, count(b.ogc_fid) AS anzahl
1264    FROM ax_flurstueck f
1265    JOIN alkis_beziehungen b
1266      ON f.gml_id = b.beziehung_von
1267  WHERE b.beziehungsart = 'istGebucht'
1268  GROUP BY f.gml_id
1269  HAVING count(b.ogc_fid) > 1;
1270
1271-- Noch einfacher? - Auch ohne JOIN wird das selbe Ergebnis geliefert.
1272-- Doppelte Verweise zÀhlen ohne zu prÌfen, ob die gml_id in ax_flurstueck existiert.
1273--   SELECT b.beziehung_von, count(b.ogc_fid) AS anzahl
1274--     FROM alkis_beziehungen b
1275--    WHERE b.beziehungsart = 'istGebucht'
1276--   GROUP BY b.beziehung_von
1277--   HAVING count(b.ogc_fid) > 1;
1278
1279COMMENT ON VIEW mehrfache_buchung_zu_fs
1280 IS 'Fehler: Nach replace von ax_flurtstueck mit einer neuen ax_buchungsstelle bleibt die alte Verbindung in alkis_beziehungen';
1281
1282
1283-- Suche nach Fehler durch "Replace"
1284-- Eine Hausnummer darf nur einem Gebaeude zugeordnet werden.
1285-- Das verschieben der Relation
1286--   ax_gebaeude   >von>zeigtAuf>zu>  ax_lagebezeichnungmithausnummer
1287-- fuehrt möglicherweise dazu, dass die alte Relation nicht gelöscht wird.
1288-- Die angezeigten FÀlle sind potentielle Fehler.
1289
1290/*
1291-- alte Version mit Relationen ÃŒber die Tabelle "alkis_beziehungen":
1292
1293    +++  HIER HIN KOPIEREN +++
1294
1295*/
1296-- neue Version mit Relationen OHNE die Tabelle "alkis_beziehungen":
1297
1298CREATE OR REPLACE VIEW fehler_hausnummer_mehrfach_verwendet
1299AS
1300 SELECT l.gml_id, l.gemeinde, l.lage, l.hausnummer
1301   FROM ax_gebaeude g
1302   JOIN alkis_beziehungen b ON b.beziehung_von = g.gml_id
1303   JOIN ax_lagebezeichnungmithausnummer l ON b.beziehung_zu = l.gml_id
1304  WHERE b.beziehungsart = 'zeigtAuf'
1305  GROUP BY l.gml_id, l.gemeinde, l.lage, l.hausnummer
1306  HAVING count(g.gml_id) > 1;
1307
1308COMMENT ON VIEW fehler_hausnummer_mehrfach_verwendet
1309 IS 'Fehler: Nach replace von ax_lagebezeichnungmithausnummer mit einem neuen ax_gebaeude bleibt die alte Verbindung in alkis_beziehungen';
1310
1311
1312-- Der umgekehrt Fall ist erlaubt.
1313-- GebÀude hat mehrere Nummern.
1314
1315/*
1316-- alte Version mit Relationen ÃŒber die Tabelle "alkis_beziehungen":
1317
1318CREATE OR REPLACE VIEW adressen_zu_gebauede_mit_mehreren_hausnummern
1319AS
1320 SELECT l.gml_id, l.gemeinde, l.lage, l.hausnummer -- Anzeige der Adressfelder
1321 FROM ax_gebaeude g1
1322   JOIN alkis_beziehungen b ON b.beziehung_von = g1.gml_id
1323   JOIN ax_lagebezeichnungmithausnummer l ON b.beziehung_zu = l.gml_id
1324  WHERE b.beziehungsart = 'zeigtAuf' AND g1.gml_id IN -- Subquery sucht GebÀude mit meherern Hausnummen
1325   (SELECT g2.gml_id
1326    FROM ax_gebaeude g2
1327    JOIN alkis_beziehungen b ON b.beziehung_von = g2.gml_id
1328    JOIN ax_lagebezeichnungmithausnummer l ON b.beziehung_zu = l.gml_id
1329   WHERE b.beziehungsart = 'zeigtAuf'
1330   GROUP BY g2.gml_id
1331   HAVING count(l.gml_id) > 1);
1332
1333*/
1334-- neue Version mit Relationen OHNE die Tabelle "alkis_beziehungen":
1335
1336CREATE OR REPLACE VIEW adressen_zu_gebauede_mit_mehreren_hausnummern
1337AS
1338 SELECT l.gml_id, l.gemeinde, l.lage, l.hausnummer -- Anzeige der Adressfelder
1339 FROM ax_gebaeude g1
1340   JOIN alkis_beziehungen b ON b.beziehung_von = g1.gml_id
1341   JOIN ax_lagebezeichnungmithausnummer l ON b.beziehung_zu = l.gml_id
1342  WHERE b.beziehungsart = 'zeigtAuf' AND g1.gml_id IN -- Subquery sucht GebÀude mit meherern Hausnummen
1343   (SELECT g2.gml_id
1344    FROM ax_gebaeude g2
1345    JOIN alkis_beziehungen b ON b.beziehung_von = g2.gml_id
1346    JOIN ax_lagebezeichnungmithausnummer l ON b.beziehung_zu = l.gml_id
1347   WHERE b.beziehungsart = 'zeigtAuf'
1348   GROUP BY g2.gml_id
1349   HAVING count(l.gml_id) > 1);
1350
1351COMMENT ON VIEW adressen_zu_gebauede_mit_mehreren_hausnummern
1352 IS 'GebÀude mit mehreren Hausnummern suchen (ist erlaubt) und dazu die Adressen anzeigen.';
1353
1354
1355-- Analyse der Buchungs-Arten im Bestand
1356CREATE OR REPLACE VIEW buchungsarten_vorkommend
1357AS
1358  SELECT a.wert, a.bezeichner,
1359         count(b.gml_id) AS anzahl_buchungen
1360    FROM ax_buchungsstelle_buchungsart a
1361    JOIN ax_buchungsstelle b  ON a.wert = b.buchungsart
1362GROUP BY a.wert, a.bezeichner
1363ORDER BY a.wert, a.bezeichner;
1364
1365COMMENT ON VIEW buchungsarten_vorkommend
1366 IS 'Welche Arten von Buchungsart kommen in dieser Datenbank tÀtsÀchlich vor?.';
1367
1368
1369-- Analyse: FÀlle mit Erbbaurecht
1370-- Benutzt den Baustein-View "doppelverbindung"
1371
1372--   +++ BESSER: analog doppelverbindung direkt codieren
1373
1374CREATE OR REPLACE VIEW erbbaurechte_suchen
1375AS
1376  SELECT f.gml_id,
1377  --f.flurstueckskennzeichen,
1378    f.gemarkungsnummer || '-' || f.flurnummer || '-' || f.zaehler AS fssuch, f.nenner
1379   FROM ax_flurstueck    f
1380   JOIN doppelverbindung d     -- beide FÀlle ÃŒber Union-View: direkt und ÃŒber Recht von BS an BS
1381     ON d.fsgml = f.gml_id
1382   JOIN ax_buchungsstelle s    -- Buchungs-Stelle
1383     ON d.bsgml = s.gml_id
1384   WHERE s.buchungsart = 2101;
1385
1386COMMENT ON VIEW erbbaurechte_suchen
1387 IS 'Suche nach FÀllen mit Buchungsrt 2101=Erbbaurecht';
1388
1389
1390-- Probleme mit der Trigger-Function "update_fields_beziehungen()"
1391-- Manchmal kann zu einer gml_id in "alkis_beziehungen" die zustÀndige Tabelle nicht gefunden werden.
1392-- Nach Änderung der Trigger-Function am 10.12.2013 wird die Beziehung trotzdem eingetragen,
1393-- nur die Felder "von_typename" und "beginnt" bleiben leer.
1394-- 2014-01-31: Dieser Trigger wird nicht mehr verwendet.
1395
1396     -- Diese FÀlle anzeigen:
1397--     CREATE OR REPLACE VIEW beziehungsproblem_faelle
1398--    AS
1399--       SELECT *
1400--        FROM alkis_beziehungen
1401--        WHERE beginnt IS NULL;
1402--     COMMENT ON VIEW beziehungsproblem_faelle
1403--      IS 'Fehlersuche: Im Trigger "update_fields_beziehungen()" wurde das Objekt in seiner Tabelle nicht gefunden, darum kein "beginnt" in "alkis_beziehungen" eingetragen.';
1404
1405     -- Wie viele sind das?
1406--     CREATE OR REPLACE VIEW beziehungsproblem_zaehler
1407--     AS
1408--       SELECT count(ogc_fid) AS anzahl
1409--         FROM alkis_beziehungen
1410--        WHERE beginnt IS NULL;
1411--     COMMENT ON VIEW beziehungsproblem_faelle
1412--      IS 'Fehlersuche: Wie oft fehlt das beginnt-Feld in alkis_beziehungen?';
1413
1414
1415-- Suchen von Gewannenbezeichnungen, die auch als Straßenname verwendet werden.
1416-- Diese FÀlle fÃŒhren möglicherweise zu unvollstÀndiger Ausgabe beim Export "alle FlurstÃŒcke an einer Straße"
1417-- weil nur Lagebezeichnung MIT und OHNE Hausnummer gesucht wird, aber keine gleich lautende Gewanne.
1418
1419
1420/*
1421-- alte Version mit Relationen ÃŒber die Tabelle "alkis_beziehungen":
1422
1423CREATE OR REPLACE VIEW strasse_als_gewanne
1424AS
1425  SELECT k.gemeinde, k.lage AS strassenschluessel,
1426      -- k.bezeichnung      AS strassenname,
1427         o.unverschluesselt AS gewanne,
1428         count(fo.gml_id) AS anzahl_fs_gewanne
1429  FROM ax_lagebezeichnungkatalogeintrag k   -- Straßentabelle
1430  JOIN ax_lagebezeichnungohnehausnummer o   -- Gewanne
1431    ON k.bezeichnung = o.unverschluesselt   -- Gleiche Namen
1432  -- Join Gewanne auf FlurstÃŒcke um nur solche FÀlle anzuzeigen, die verwendet werden
1433  -- UND die auch in der gleichen Gemeinde liegen.
1434  -- Sonst könnte zufÀllige Namensgleichheiten aus verschiedenen Gemeinden geben.
1435  JOIN alkis_beziehungen vo
1436    ON o.gml_id=vo.beziehung_zu AND vo.beziehungsart= 'zeigtAuf'
1437  JOIN ax_flurstueck fo
1438    ON fo.gml_id=vo.beziehung_von
1439 WHERE fo.gemeinde = k.gemeinde  -- Gewanne wird fÃŒr ein Flst. in gleicher Gemeinde verwendet, wie der StraßenschlÃŒssel
1440  GROUP BY k.gemeinde, k.lage, o.unverschluesselt --, k.bezeichnung
1441  ORDER BY k.gemeinde, k.lage, o.unverschluesselt --, k.bezeichnung
1442  ;
1443
1444*/
1445-- neue Version mit Relationen OHNE die Tabelle "alkis_beziehungen":
1446
1447CREATE OR REPLACE VIEW strasse_als_gewanne
1448AS
1449  SELECT k.gemeinde, k.lage AS strassenschluessel,
1450      -- k.bezeichnung      AS strassenname,
1451         o.unverschluesselt AS gewanne,
1452         count(fo.gml_id) AS anzahl_fs_gewanne
1453  FROM ax_lagebezeichnungkatalogeintrag k   -- Straßentabelle
1454  JOIN ax_lagebezeichnungohnehausnummer o   -- Gewanne
1455    ON k.bezeichnung = o.unverschluesselt   -- Gleiche Namen
1456  -- Join Gewanne auf FlurstÃŒcke um nur solche FÀlle anzuzeigen, die verwendet werden
1457  -- UND die auch in der gleichen Gemeinde liegen.
1458  -- Sonst könnte zufÀllige Namensgleichheiten aus verschiedenen Gemeinden geben.
1459  JOIN alkis_beziehungen vo
1460    ON o.gml_id=vo.beziehung_zu AND vo.beziehungsart= 'zeigtAuf'
1461  JOIN ax_flurstueck fo
1462    ON fo.gml_id=vo.beziehung_von
1463 WHERE fo.gemeinde = k.gemeinde  -- Gewanne wird fÃŒr ein Flst. in gleicher Gemeinde verwendet, wie der StraßenschlÃŒssel
1464  GROUP BY k.gemeinde, k.lage, o.unverschluesselt --, k.bezeichnung
1465  ORDER BY k.gemeinde, k.lage, o.unverschluesselt --, k.bezeichnung
1466  ;
1467
1468COMMENT ON VIEW strasse_als_gewanne
1469 IS 'Gewannenbezeichnungen, die auch als Straßenname verwendet werden. Mit FlurstÃŒcks-ZÀhler.';
1470
1471
1472-- Wie zuvor, aber die FlurstÌcke werden hier nicht nur gezÀhlt sondern auch aufgelistet.
1473-- das Format des FlusrtÃŒckskennzeichens kann in die Mapbender-Navigation eingegeben werden.
1474
1475/*
1476-- alte Version mit Relationen ÃŒber die Tabelle "alkis_beziehungen":
1477
1478CREATE OR REPLACE VIEW strasse_als_gewanne_flst
1479AS
1480  SELECT -- fo.gml_id,
1481         fo.gemarkungsnummer || '-' || fo.flurnummer || '-' || fo.zaehler::text || COALESCE ('/' || fo.nenner::text, '') AS flstkennz,
1482         k.gemeinde,
1483         o.unverschluesselt AS gewanne,
1484      -- k.bezeichnung AS strassenname,
1485         k.lage        -- AS strassen_schluessel
1486  FROM ax_lagebezeichnungkatalogeintrag k   -- Straßentabelle
1487  JOIN ax_lagebezeichnungohnehausnummer o   -- Gewanne
1488    ON k.bezeichnung = o.unverschluesselt   -- Gleiche Namen
1489  JOIN alkis_beziehungen vo
1490    ON o.gml_id=vo.beziehung_zu AND vo.beziehungsart= 'zeigtAuf'
1491  JOIN ax_flurstueck fo
1492    ON fo.gml_id=vo.beziehung_von
1493 WHERE fo.gemeinde = k.gemeinde  -- Gewanne wird fÃŒr ein Flst. in gleicher Gemeinde verwendet, wie der StraßenschlÃŒssel
1494  ORDER BY fo.gemarkungsnummer, fo.flurnummer, fo.zaehler, k.gemeinde, k.bezeichnung;
1495
1496*/
1497-- neue Version mit Relationen OHNE die Tabelle "alkis_beziehungen":
1498
1499CREATE OR REPLACE VIEW strasse_als_gewanne_flst
1500AS
1501  SELECT -- fo.gml_id,
1502         fo.gemarkungsnummer || '-' || fo.flurnummer || '-' || fo.zaehler::text || COALESCE ('/' || fo.nenner::text, '') AS flstkennz,
1503         k.gemeinde,
1504         o.unverschluesselt AS gewanne,
1505      -- k.bezeichnung AS strassenname,
1506         k.lage        -- AS strassen_schluessel
1507  FROM ax_lagebezeichnungkatalogeintrag k   -- Straßentabelle
1508  JOIN ax_lagebezeichnungohnehausnummer o   -- Gewanne
1509    ON k.bezeichnung = o.unverschluesselt   -- Gleiche Namen
1510  JOIN alkis_beziehungen vo
1511    ON o.gml_id=vo.beziehung_zu AND vo.beziehungsart= 'zeigtAuf'
1512  JOIN ax_flurstueck fo
1513    ON fo.gml_id=vo.beziehung_von
1514 WHERE fo.gemeinde = k.gemeinde  -- Gewanne wird fÃŒr ein Flst. in gleicher Gemeinde verwendet, wie der StraßenschlÃŒssel
1515  ORDER BY fo.gemarkungsnummer, fo.flurnummer, fo.zaehler, k.gemeinde, k.bezeichnung;
1516
1517COMMENT ON VIEW strasse_als_gewanne_flst
1518 IS 'FlurstÃŒcke mit Gewannenbezeichnungen, die auch als Straßenname verwendet werden.';
1519
1520
1521
1522-- Suche nach Fehlern in den Daten, die moeglicherweise aus der Migration stammen und
1523-- im Rahmen der Nachmigration noch korrigiert werden muessen.
1524
1525
1526/*
1527-- alte Version mit Relationen ÃŒber die Tabelle "alkis_beziehungen":
1528
1529CREATE OR REPLACE VIEW nachmigration_aehnliche_anschriften
1530AS
1531  SELECT DISTINCT p.gml_id, p.nachnameoderfirma, p.vorname,
1532        a1.ort_post, a1.strasse AS strasse1, a2.strasse AS strasse2, a1.hausnummer
1533     -- , b1.import_id AS import1, b2.import_id AS import2
1534    FROM ax_person         p
1535    JOIN alkis_beziehungen b1 ON b1.beziehung_von=p.gml_id
1536    JOIN ax_anschrift      a1 ON a1.gml_id=b1.beziehung_zu
1537    JOIN alkis_beziehungen b2 ON b2.beziehung_von=p.gml_id
1538    JOIN ax_anschrift      a2 ON a2.gml_id=b2.beziehung_zu
1539    WHERE b1.beziehungsart='hat'
1540      AND b2.beziehungsart='hat'
1541      AND a1.gml_id    <>  a2.gml_id
1542      AND a1.ort_post   =  a2.ort_post
1543      AND a1.strasse    like trim(a2.strasse, '.') || '%'
1544      AND a1.hausnummer =  a2.hausnummer
1545    ORDER BY p.nachnameoderfirma, p.vorname;
1546
1547*/
1548-- neue Version mit Relationen OHNE die Tabelle "alkis_beziehungen":
1549
1550CREATE OR REPLACE VIEW nachmigration_aehnliche_anschriften
1551AS
1552  SELECT DISTINCT p.gml_id, p.nachnameoderfirma, p.vorname,
1553        a1.ort_post, a1.strasse AS strasse1, a2.strasse AS strasse2, a1.hausnummer
1554     -- , b1.import_id AS import1, b2.import_id AS import2
1555    FROM ax_person         p
1556    JOIN alkis_beziehungen b1 ON b1.beziehung_von=p.gml_id
1557    JOIN ax_anschrift      a1 ON a1.gml_id=b1.beziehung_zu
1558    JOIN alkis_beziehungen b2 ON b2.beziehung_von=p.gml_id
1559    JOIN ax_anschrift      a2 ON a2.gml_id=b2.beziehung_zu
1560    WHERE b1.beziehungsart='hat'
1561      AND b2.beziehungsart='hat'
1562      AND a1.gml_id    <>  a2.gml_id
1563      AND a1.ort_post   =  a2.ort_post
1564      AND a1.strasse    like trim(a2.strasse, '.') || '%'
1565      AND a1.hausnummer =  a2.hausnummer
1566    ORDER BY p.nachnameoderfirma, p.vorname;
1567
1568COMMENT ON VIEW nachmigration_aehnliche_anschriften
1569 IS 'Zu einer Person gibt es mehrere Anschriften, die in Ort und Hausnummer identisch sind und beim Straßennemen entweder auch identisch sind oder eine AbkÃŒrzung mit Punkt enthalten.';
1570
1571
1572-- END --
Note: See TracBrowser for help on using the repository browser.