source: trunk/import/sichten.sql @ 328

Revision 328, 46.5 KB checked in by frank.jaeger, 7 years ago (diff)

Letzte kleine Korrekturen an Import für PostNAS Version 0.7 vor Wechsel auf Version 0.8

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 0.7
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
33-- Bausteine fÃŒr andere Views:
34-- ---------------------------
35
36-- Ein View, der die Verbindung von FlurstÌck zur Buchung fÌr zwei verschiedene FÀlle herstellt.
37-- Einmal die "normalen" (direkten) Buchungen.
38-- Zweitens ÃŒber die Rechte von Buchungsstellen an anderen Buchungsstellen.
39-- Dies kann als "MittelstÃŒck" in den anderen Views eingefÃŒgt werden.
40
41-- Einfach/Direkt:
42--   FlurstÃŒck   >istGebucht>                         (Buchungs-Stelle)
43--
44-- Mit "Recht an":
45--   FlurstÃŒck   >istGebucht>  Buchungs-Stelle  <an<  (Buchungs-Stelle)
46--                               (dienend)              (herrschend)
47
48--           DROP VIEW public.doppelverbindung;
49CREATE OR REPLACE VIEW public.doppelverbindung
50AS
51  SELECT v1.beziehung_von AS fsgml,       -- gml_id auf FlurstÃŒck - Seite
52         v1.beziehung_zu  AS bsgml,       -- gml_id auf Buchungs  - Seite
53      --'direkt' AS fall,
54         0 AS ba_dien
55    FROM alkis_beziehungen v1
56   WHERE v1.beziehungsart = 'istGebucht'  -- FS --> Buchung
57 UNION
58  -- Buchungstelle  >an>  Buchungstelle  >istBestandteilVon>  BLATT
59  SELECT v2.beziehung_von AS fsgml,        -- gml_id auf FlurstÃŒck - Seite
60         an.beziehung_von AS bsgml,        -- gml_id auf Buchungs  - Seite (herrschendes GB)
61      --'Recht an' AS fall,
62         dien.buchungsart AS ba_dien       -- Ein Feld aus der Zwischen-Buchung zur Fall-Unterscheidung
63    FROM alkis_beziehungen v2
64    JOIN ax_buchungsstelle dien
65      ON  v2.beziehung_zu = dien.gml_id
66    JOIN alkis_beziehungen an
67      ON dien.gml_id = an.beziehung_zu
68   WHERE v2.beziehungsart = 'istGebucht'   -- FS --> Buchung
69     AND an.beziehungsart = 'an';
70
71COMMENT ON VIEW public.doppelverbindung
72 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.';
73
74-- Test-Ausgabe: Ein paar FÀlle mit "Recht an"
75--   SELECT * FROM doppelverbindung WHERE ba_dien > 0 LIMIT 20;
76
77
78-- Ein View, der die Verbindung von FlurstÃŒck zur Straßentabelle fÃŒr zwei verschiedene FÀlle herstellt.
79-- Einmal ÃŒber die Lagebezeichnung MIT Hausnummer und einmal OHNE.
80-- Dies kann als "MittelstÃŒck" in den anderen Views eingefÃŒgt werden.
81
82--   FlurstÃŒck  >weistAuf> ax_lagebezeichnungmithausnummer  <JOIN> ax_lagebezeichnungkatalogeintrag
83--   FlurstÃŒck  >zeigtAuf> ax_lagebezeichnungohnehausnummer <JOIN> ax_lagebezeichnungkatalogeintrag
84
85--           DROP VIEW public.flst_an_strasse;
86CREATE OR REPLACE VIEW public.flst_an_strasse
87AS
88  SELECT vm.beziehung_von AS fsgml,          -- Join auf "gml_id" aus "ax_flurstÃŒck"
89         sm.gml_id AS stgml,                 -- Filter: gml_id der Straße
90      -- sm.gemeinde, sm.lage,               -- Gemeinde- und Straßenschluessel als Filter?
91         'm' AS fall                         -- SÀtze unterschieden: Mit HsNr
92    FROM alkis_beziehungen vm                -- Verbindung Mit
93    JOIN ax_lagebezeichnungmithausnummer lm  -- Lage MIT
94      ON lm.gml_id=vm.beziehung_zu
95     AND vm.beziehungsart= 'weistAuf'
96    JOIN ax_lagebezeichnungkatalogeintrag sm -- Ausnahmsweise mal direkt und nicht ÃŒber die "alkis_beziehungen"
97      ON lm.land=sm.land
98     AND lm.regierungsbezirk=sm.regierungsbezirk
99     AND lm.kreis=sm.kreis
100     AND lm.gemeinde=sm.gemeinde
101     AND lm.lage=sm.lage
102 UNION
103  SELECT vo.beziehung_von AS fsgml,          -- Join auf gml_id aus ax_flurstÃŒck
104         so.gml_id AS stgml,                 -- Filter: gml_id der Straße
105      -- so.gemeinde, so.lage                -- Gemeinde- und Straßenschluessel als Filter?
106         'o' AS fall                         -- SÀtze unterschieden: Ohne HsNr
107    FROM alkis_beziehungen vo                -- Verbindung OHNE
108    JOIN ax_lagebezeichnungohnehausnummer lo -- Lage OHNE
109      ON lo.gml_id=vo.beziehung_zu
110     AND vo.beziehungsart= 'zeigtAuf'
111    JOIN ax_lagebezeichnungkatalogeintrag so -- Straße OHNE
112      ON lo.land=so.land
113     AND lo.regierungsbezirk=so.regierungsbezirk
114     AND lo.kreis=so.kreis
115     AND lo.gemeinde=so.gemeinde
116     AND lo.lage=so.lage;
117
118COMMENT ON VIEW public.flst_an_strasse
119 IS 'ALKIS-Beziehung von FlurstÃŒck zu Straßentabelle. UNION-Zusammenfassung der FÀlle MIT und OHNE Hausnummer.';
120
121-- Muss man noch dafÃŒr sorgen, dass FlurstÃŒck nicht doppelt vorkommt? z.B. mit DISTINCT
122-- Oder mÃŒssen ggf. mehrfache FS im Programm ÃŒbersprungen werden?
123
124-- Test-Ausgabe:
125--   SELECT * FROM flst_an_strasse WHERE stgml='DENW18AL000004Fl' LIMIT 40;
126
127-- Ende "Bausteine"
128
129
130-- Generelle Export-Struktur "FlurstÃŒck - Buchung - Grundbuch - Person"
131-- --------------------------------------------------------------------
132-- Verwendet den gespeicherten View "doppelverbindung".
133-- Wird benötigt im Auskunft-Modul "alkisexport.php":
134-- Je nach aufrufendem Modul wird der Filter (WHERE) an anderer Stelle gesetzt (gml_id von FS, GB oder Pers.)
135-- FÃŒr Filter nach "Straße" siehe die nachfolgende Sonderversion "exp_csv_str".
136
137-- Problem / Konflikt:
138-- Es kann nur eine lineare Struktur aus Spalten und Zeilen exportiert werden.
139-- Wenn nicht nur die Daten des Ausgangs-Objektes exportiert werden, sondern auch verbundene Tabellen in
140-- einer 1:N-Struktur, dann verdoppeln sich Zeileninhalte und es werden redundante Daten erzeugt.
141-- Diese Redundanzen mÃŒssen vom dem Programm gefiltert werden, das die Daten ÃŒber eine Schnittstelle einliest.
142
143-- Anwendungs-Beispiel: Abrechnung von AnliegerbeitrÀgen.
144
145-- 2014-01-21: "Rechtsgemeinschaft" in den Datensatz aller anderen Namen
146--           DROP VIEW exp_csv;
147CREATE OR REPLACE VIEW exp_csv
148AS
149 SELECT
150  -- FlurstÃŒck
151    f.gml_id                             AS fsgml,       -- möglicher Filter FlurstÃŒcks-GML-ID
152    f.flurstueckskennzeichen             AS fs_kennz,
153    f.gemarkungsnummer,                                  -- Teile des FS-Kennz. noch mal einzeln
154    f.flurnummer, f.zaehler, f.nenner,
155    f.amtlicheflaeche                    AS fs_flae,
156    g.bezeichnung                        AS gemarkung,
157
158  -- Grundbuch
159    gb.gml_id                            AS gbgml,       -- möglicher Filter Grundbuch-GML-ID
160    gb.bezirk                            AS gb_bezirk,
161    gb.buchungsblattnummermitbuchstabenerweiterung AS gb_blatt,
162    z.bezeichnung                        AS beznam,      -- GB-Bezirks-Name
163
164  -- Buchungsstelle (GrundstÃŒck)
165    s.laufendenummer                     AS bu_lfd,      -- BVNR
166    --s.zaehler, s.nenner,                                -- Anteil des GB am FS, einzelne Felder
167    '=' || s.zaehler || '/' || s.nenner  AS bu_ant,      -- als Excel-Formel (nur bei Wohnungsgrundbuch JOIN ÃŒber 'Recht an')
168    s.buchungsart,                                       -- verschlÃŒsselt
169    b.bezeichner                         AS bu_art,      -- Buchungsart entschlÃŒsselt
170
171  -- NamensNummer (Normalfall mit Person)
172    nn.laufendenummernachdin1421         AS nam_lfd,
173    '=' || nn.zaehler|| '/' || nn.nenner AS nam_ant,         -- als Excel-Formel
174
175  -- Rechtsgemeinsachaft (Sonderfall von Namensnummer, ohne Person, ohne Nummer)
176    rg.artderrechtsgemeinschaft          AS nam_adr,
177    rg.beschriebderrechtsgemeinschaft    AS nam_bes,
178
179  -- Person
180    p.gml_id                             AS psgml,           -- möglicher Filter Personen-GML-ID
181    p.anrede,
182    p.vorname,
183    p.namensbestandteil,
184    p.nachnameoderfirma,                                     -- Familienname
185    p.geburtsdatum,
186    --p.geburtsname, p.akademischergrad
187 
188  -- Adresse der Person
189    a.postleitzahlpostzustellung         AS plz,
190    a.ort_post                           AS ort,             -- Anschreifenzeile 1: PLZ+Ort
191    a.strasse,  a.hausnummer,                                -- Anschriftenzeile 2: Straße+HsNr
192    a.bestimmungsland                    AS land
193
194  FROM ax_flurstueck    f               -- FlurstÃŒck
195  JOIN doppelverbindung d               -- beide FÀlle ÃŒber Union-View: direkt und ÃŒber Recht von Buchung an Buchung
196    ON d.fsgml = f.gml_id
197
198  JOIN ax_gemarkung g                   -- entschlÃŒsseln
199    ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer
200
201  JOIN ax_buchungsstelle s              -- Buchungs-Stelle
202    ON d.bsgml = s.gml_id
203  JOIN ax_buchungsstelle_buchungsart b  -- EnstschlÃŒsselung der Buchungsart
204    ON s.buchungsart = b.wert
205
206  JOIN alkis_beziehungen v3             -- Buchung --> Grundbuchblatt
207    ON s.gml_id = v3.beziehung_von AND v3.beziehungsart = 'istBestandteilVon'
208  JOIN ax_buchungsblatt  gb
209    ON v3.beziehung_zu = gb.gml_id
210
211  JOIN ax_buchungsblattbezirk z
212    ON gb.land=z.land AND gb.bezirk=z.bezirk
213
214  JOIN alkis_beziehungen v4             -- Blatt  --> NamNum
215    ON v4.beziehung_zu = gb.gml_id AND v4.beziehungsart = 'istBestandteilVon' 
216  JOIN ax_namensnummer nn
217    ON v4.beziehung_von = nn.gml_id
218
219  JOIN alkis_beziehungen v5             -- NamNum --> Person
220   -- 2014-01-20: Mit LEFT ab hier werden auch NumNum-Zeilen mit "Beschreibung der Rechtsgemeinschaft" geliefert (ohne Person)
221    ON v5.beziehung_von = nn.gml_id AND v5.beziehungsart = 'benennt'
222  JOIN ax_person p
223    ON v5.beziehung_zu = p.gml_id
224
225  LEFT JOIN alkis_beziehungen v6        -- Person --> Anschrift
226    ON v6.beziehung_von = p.gml_id AND v6.beziehungsart = 'hat'
227  LEFT JOIN ax_anschrift a
228    ON v6.beziehung_zu = a.gml_id
229
230  -- 2mal "LEFT JOIN" verdoppelt die Zeile in der Ausgabe. Darum als Subquery:
231
232  -- Noch mal "GB -> NamNum", aber dieses Mal fÃŒr "Rechtsgemeinschaft".
233  -- Kommt max. 1 mal je GB vor und hat keine Relation auf Person.
234  LEFT JOIN
235   ( SELECT v7.beziehung_zu,
236            rg.artderrechtsgemeinschaft,
237            rg.beschriebderrechtsgemeinschaft
238       FROM ax_namensnummer rg
239       JOIN alkis_beziehungen v7              -- Blatt  --> NamNum (Rechtsgemeinschaft)
240         ON v7.beziehung_von = rg.gml_id
241      WHERE v7.beziehungsart = 'istBestandteilVon'
242        AND NOT rg.artderrechtsgemeinschaft IS NULL
243   ) AS rg                         -- Rechtsgemeinschaft
244   ON rg.beziehung_zu = gb.gml_id  -- zum GB
245
246  ORDER BY f.flurstueckskennzeichen,
247           gb.bezirk, gb.buchungsblattnummermitbuchstabenerweiterung, s.laufendenummer,
248           nn.laufendenummernachdin1421;
249
250COMMENT ON VIEW exp_csv
251 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.';
252
253  GRANT SELECT ON TABLE exp_csv TO mb27;       -- User fÃŒr Auskunfts-Programme
254--GRANT SELECT ON TABLE exp_csv TO alkisbuch;  -- User fÃŒr Auskunfts-Programme RLP-Demo
255
256
257-- Variante des View "exp_csv":
258-- Hier wird zusÀtzlich der Baustein "flst_an_strasse" verwendet.
259-- Der Filter "WHERE stgml= " auf die "gml_id" von "ax_lagebezeichnungkatalogeintrag" sollte gesetzt werden
260-- um alle FlurstÃŒcke zu bekommen, die an einer Straße liegen.
261-- DROP           VIEW exp_csv_str;
262CREATE OR REPLACE VIEW exp_csv_str
263AS
264 SELECT
265    l.stgml,                                             -- Filter: Straßen-GML-ID
266
267  -- FlurstÃŒck
268    f.gml_id                             AS fsgml,       -- Gruppenwechsel fÃŒr "function lage_zum_fs" in alkisexport.php
269    f.flurstueckskennzeichen             AS fs_kennz,
270    f.gemarkungsnummer,                                  -- Teile des FS-Kennz. noch mal einzeln
271    f.flurnummer, f.zaehler, f.nenner,
272    f.amtlicheflaeche                    AS fs_flae,
273    g.bezeichnung                        AS gemarkung,
274
275  -- Grundbuch
276  --gb.gml_id                            AS gbgml,       -- möglicher Filter Grundbuch-GML-ID
277    gb.bezirk                            AS gb_bezirk,
278    gb.buchungsblattnummermitbuchstabenerweiterung AS gb_blatt,
279    z.bezeichnung                        AS beznam,      -- GB-Bezirks-Name
280
281  -- Buchungsstelle (GrundstÃŒck)
282    s.laufendenummer                     AS bu_lfd,      -- BVNR
283    --s.zaehler, s.nenner,                                -- Anteil des GB am FS, einzelne Felder
284    '=' || s.zaehler || '/' || s.nenner  AS bu_ant,      -- als Excel-Formel (nur bei Wohnungsgrundbuch JOIN ÃŒber 'Recht an')
285    s.buchungsart,                                       -- verschlÃŒsselt
286    b.bezeichner                         AS bu_art,      -- Buchungsart entschlÃŒsselt
287
288  -- NamensNummer (Normalfall mit Person)
289    nn.laufendenummernachdin1421         AS nam_lfd,
290    '=' || nn.zaehler|| '/' || nn.nenner AS nam_ant,         -- als Excel-Formel
291
292  -- Rechtsgemeinsachaft (Sonderfall von Namensnummer, ohne Person, ohne Nummer)
293    rg.artderrechtsgemeinschaft          AS nam_adr,
294    rg.beschriebderrechtsgemeinschaft    AS nam_bes,
295
296  -- Person
297  --p.gml_id                             AS psgml,           -- möglicher Filter Personen-GML-ID
298    p.anrede,
299    p.vorname,
300    p.namensbestandteil,
301    p.nachnameoderfirma,                                     -- Familienname
302    p.geburtsdatum,
303    --p.geburtsname, p.akademischergrad
304 
305  -- Adresse der Person
306    a.postleitzahlpostzustellung         AS plz,
307    a.ort_post                           AS ort,             -- Anschreifenzeile 1: PLZ+Ort
308    a.strasse,  a.hausnummer,                                -- Anschriftenzeile 2: Straße+HsNr
309    a.bestimmungsland                    AS land
310
311  FROM ax_flurstueck    f               -- FlurstÃŒck
312
313  JOIN flst_an_strasse  l               -- Lage (hier zusÀtzlicher JOIN gegenÃŒber Version "exp_csv")
314        ON l.fsgml = f.gml_id
315
316  JOIN doppelverbindung d               -- beide FÀlle ÃŒber Union-View: direkt und ÃŒber Recht von Buchung an Buchung
317    ON d.fsgml = f.gml_id
318
319  JOIN ax_gemarkung g                   -- entschlÃŒsseln
320    ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer
321
322  JOIN ax_buchungsstelle s              -- Buchungs-Stelle
323    ON d.bsgml = s.gml_id
324  JOIN ax_buchungsstelle_buchungsart b  -- EnstschlÃŒsselung der Buchungsart
325    ON s.buchungsart = b.wert
326
327  JOIN alkis_beziehungen v3             -- Buchung --> Grundbuchblatt
328    ON s.gml_id = v3.beziehung_von AND v3.beziehungsart = 'istBestandteilVon'
329  JOIN ax_buchungsblatt  gb
330    ON v3.beziehung_zu = gb.gml_id
331
332  JOIN ax_buchungsblattbezirk z
333    ON gb.land=z.land AND gb.bezirk=z.bezirk
334
335  JOIN alkis_beziehungen v4             -- Blatt  --> NamNum
336    ON v4.beziehung_zu = gb.gml_id AND v4.beziehungsart = 'istBestandteilVon' 
337  JOIN ax_namensnummer nn
338    ON v4.beziehung_von = nn.gml_id
339
340  JOIN alkis_beziehungen v5             -- NamNum --> Person
341   -- 2014-01-20: Mit LEFT ab hier werden auch NumNum-Zeilen mit "Beschreibung der Rechtsgemeinschaft" geliefert (ohne Person)
342    ON v5.beziehung_von = nn.gml_id AND v5.beziehungsart = 'benennt'
343  JOIN ax_person p
344    ON v5.beziehung_zu = p.gml_id
345
346  LEFT JOIN alkis_beziehungen v6        -- Person --> Anschrift
347    ON v6.beziehung_von = p.gml_id AND v6.beziehungsart = 'hat'
348  LEFT JOIN ax_anschrift a
349    ON v6.beziehung_zu = a.gml_id
350
351  -- 2mal "LEFT JOIN" verdoppelt die Zeile in der Ausgabe. Darum als Subquery:
352
353  -- Noch mal "GB -> NamNum", aber dieses Mal fÃŒr "Rechtsgemeinschaft".
354  -- Kommt max. 1 mal je GB vor und hat keine Relation auf Person.
355  LEFT JOIN
356   ( SELECT v7.beziehung_zu,
357            rg.artderrechtsgemeinschaft,
358            rg.beschriebderrechtsgemeinschaft
359       FROM ax_namensnummer rg
360       JOIN alkis_beziehungen v7              -- Blatt  --> NamNum (Rechtsgemeinschaft)
361         ON v7.beziehung_von = rg.gml_id
362      WHERE v7.beziehungsart = 'istBestandteilVon'
363        AND NOT rg.artderrechtsgemeinschaft IS NULL
364   ) AS rg                         -- Rechtsgemeinschaft
365   ON rg.beziehung_zu = gb.gml_id  -- zum GB
366
367  ORDER BY f.flurstueckskennzeichen,
368           gb.bezirk, gb.buchungsblattnummermitbuchstabenerweiterung, s.laufendenummer,
369           nn.laufendenummernachdin1421;
370
371COMMENT ON VIEW exp_csv_str
372 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.';
373
374  GRANT SELECT ON TABLE exp_csv_str TO mb27;       -- User fÃŒr Auskunfts-Programme
375--GRANT SELECT ON TABLE exp_csv_str TO alkisbuch;  -- User fÃŒr Auskunfts-Programme RLP-Demo
376
377
378-- Test-Ausgabe:
379--   SELECT * FROM exp_csv_str WHERE stgml='DENW18AL000004Fl' LIMIT 40;
380
381
382-- Analyse: Kann es mehr als 1 "Rechtsgemeinschaft" zu einem GB-Blatt geben?
383-- (Diese Frage stellte sich beim Design des View "exp_csv".)
384-- Schritt 1: alle vorhandenen
385CREATE OR REPLACE VIEW rechtsgemeinschaften_zum_grundbuch
386AS
387 SELECT
388     gb.gml_id,
389     gb.bezirk,
390     gb.buchungsblattnummermitbuchstabenerweiterung AS gb_blatt,
391     nn.artderrechtsgemeinschaft,
392     nn.beschriebderrechtsgemeinschaft
393  FROM ax_buchungsblatt  gb
394  JOIN alkis_beziehungen v
395    ON v.beziehung_zu = gb.gml_id AND v.beziehungsart = 'istBestandteilVon' 
396  JOIN ax_namensnummer nn
397    ON v.beziehung_von = nn.gml_id
398  WHERE NOT nn.artderrechtsgemeinschaft IS NULL
399  ORDER BY gb.bezirk, gb.buchungsblattnummermitbuchstabenerweiterung,
400           nn.laufendenummernachdin1421;
401
402COMMENT ON VIEW rechtsgemeinschaften_zum_grundbuch
403 IS 'Rechtsgemeinschaften zum Grundbuchblatt.';
404
405-- Schritt 2: Wo gibt es mehrere zu einem GB-Blatt
406CREATE OR REPLACE VIEW rechtsgemeinschaften_zaehlen
407AS
408 SELECT gml_id, bezirk, gb_blatt, count(artderrechtsgemeinschaft) AS anzahl
409   FROM rechtsgemeinschaften_zum_grundbuch
410   GROUP BY gml_id, bezirk, gb_blatt
411   HAVING count(artderrechtsgemeinschaft) > 1
412   ORDER BY bezirk, gb_blatt;
413
414COMMENT ON VIEW rechtsgemeinschaften_zaehlen
415 IS 'Rechtsgemeinschaften zum Grundbuchblatt zaehlen. Anzeigen, wenn es mehrere gibt.';
416-- Ja, kann es geben
417
418-- Schritt 3: alle vorhandenen Zeilen anzeigen zu den GB-BlÀttern, bei denen es mehrere gibt.
419CREATE OR REPLACE VIEW rechtsgemeinschaften_mehrfachzeilen
420AS
421 SELECT *
422   FROM rechtsgemeinschaften_zum_grundbuch
423  WHERE gml_id IN (SELECT gml_id FROM rechtsgemeinschaften_zaehlen);
424
425COMMENT ON VIEW rechtsgemeinschaften_mehrfachzeilen
426 IS 'GrundbuchblÀtter mit mehr als einer Zeile Rechtsgemeinschaft.';
427-- Fazit:
428-- Man findet einige wenige identische oder Àhnlich aussehende Zeilen zu einem Grundbuch.
429-- Das sieht also eher nach einem PostNAS-FortfÌhrungsproblem aus, als nach unabhÀngigen Zeilen.
430-- Wurde hier eine Relation nicht sauber gelöscht?
431
432
433-- Welche Karten-Typen ?
434CREATE OR REPLACE VIEW kartentypen_der_texte_fuer_hnr
435AS
436   SELECT DISTINCT advstandardmodell
437   FROM ap_pto p
438   WHERE p.art = 'HNR';
439COMMENT ON VIEW kartentypen_der_texte_fuer_hnr
440  IS 'Datenanalyse: Kartentypen in Tabelle ap_pto fÃŒr Hausnummern.';
441
442-- Dies liefert:
443--  "{DKKM1000}"
444--  "{DKKM1000,DKKM500}"
445--  "{DKKM500}"
446--  NULL
447
448-- Texte, die NICHT dargestellt werden sollen.
449-- -------------------------------------------
450-- Texte und Text-Fragmente aus der Konvertierung ALK+ALB, die noch nicht gelöscht worden sind.
451CREATE OR REPLACE VIEW ap_pto_muell
452AS
453  SELECT p.ogc_fid,
454         p.schriftinhalt,
455         p.art,
456         p.drehwinkel * 57.296 AS winkel, -- * 180 / Pi
457         p.wkb_geometry
458    FROM ap_pto p
459   WHERE not p.schriftinhalt IS NULL
460     AND p.endet IS NULL
461     AND p.art IN ('AOG_AUG','PNR');
462COMMENT ON VIEW ap_pto_muell
463 IS 'Datenanalyse: Beschriftungen aus "ap_pto", die NICHT dargestellt werden sollen.';
464
465
466-- FlurstÃŒcke mit Anzeige der FlurstÃŒcksnummer an der "Standardposition"
467
468-- Nach der Konvertierung aus ALK hat zunÀchst jedes FlurstÌck eine explizit gesetzte Position der FlurstÌcksnummer.
469
470-- Nach einer manuellen Teilung bekommen die neuen FlurstÃŒcke im ALKIS nur dann eine Position,
471-- wenn die Positioin manuell bestimmt (verschoben) wurde.
472-- Wenn die FlurstÃŒcksnummer an ihrer "Standardposition" angezeigt werden soll,
473-- dann wird diese in den Daten (DHK, NAS) nicht gesetzt.
474-- Der Konverter PostNAS konvertiert aber nur die Daten, die er bekommt, er setzt nicht die Standard-Position
475-- fÃŒr die FlurstÃŒcke, die ohne eine manuelle Position kommen.
476
477-- Diese FÀlle identifizieren
478CREATE OR REPLACE VIEW flstnr_ohne_position
479AS
480 SELECT f.gml_id,
481        f.gemarkungsnummer || '-' || f.flurnummer || '-' || f.zaehler::text || COALESCE ('/' || f.nenner::text, '') AS such -- Suchstring fÃŒr ALKIS-Navigation nach FS-Kennzeichen
482 FROM        ax_flurstueck     f
483   LEFT JOIN alkis_beziehungen v  ON v.beziehung_zu = f.gml_id
484 --LEFT JOIN ap_pto            p  ON p.gml_id       = v.beziehung_von
485  WHERE v.beziehungsart is NULL
486    AND f.endet IS NULL
487--ORDER BY f.gemarkungsnummer, f.flurnummer, f.zaehler
488  ;
489COMMENT ON VIEW flstnr_ohne_position IS 'Sicht fÌr Datenanalyse: FlurstÌcke ohne manuell gesetzte Position fÌr die PrÀsentation der FS-Nr';
490
491-- Umbruch im Label? z.B. "Schwimm-/nbecken"
492-- Sind 2 Buchstaben in Mapfile bei "WRAP" möglich?
493CREATE OR REPLACE VIEW texte_mit_umbruch
494AS
495 SELECT ogc_fid, schriftinhalt, art
496   FROM ap_pto
497  WHERE not schriftinhalt is null
498    AND schriftinhalt like '%/n%';
499COMMENT ON VIEW texte_mit_umbruch
500 IS 'Sicht fÃŒr Datenanalyse: Vorkommen eines Umbruchs im Label-Text.';
501
502-- EXTENT fÃŒr das Mapfile eines Mandanten ermitteln
503CREATE OR REPLACE VIEW flurstuecks_minmax AS
504 SELECT min(st_xmin(wkb_geometry)) AS r_min,
505        min(st_ymin(wkb_geometry)) AS h_min,
506        max(st_xmax(wkb_geometry)) AS r_max,
507        max(st_ymax(wkb_geometry)) AS h_max
508   FROM ax_flurstueck f
509   WHERE f.endet IS NULL;
510COMMENT ON VIEW flurstuecks_minmax
511 IS 'Sicht fÃŒr Datenanalyse: Maximale Ausdehnung von ax_flurstueck fuer EXTENT-Angabe im Mapfile.';
512
513-- Nach Laden der Keytables:
514CREATE OR REPLACE VIEW baurecht
515AS
516  SELECT r.ogc_fid,
517         r.wkb_geometry,
518         r.gml_id,
519         r.artderfestlegung as adfkey, -- Art der Festlegung - Key
520         r."name",                     -- Eigenname des Gebietes
521         r.stelle,                     -- Stelle Key
522         r.bezeichnung AS rechtbez,    -- Verfahrensnummer
523         a.bezeichner  AS adfbez,      -- Art der Festlegung - Bezeichnung
524         d.bezeichnung AS stellbez     -- Stelle Bezeichnung
525      -- , d.stellenart                -- weiter entschluesseln?
526    FROM ax_bauraumoderbodenordnungsrecht r
527    LEFT JOIN ax_bauraumoderbodenordnungsrecht_artderfestlegung a
528      ON r.artderfestlegung = a.wert
529    LEFT JOIN ax_dienststelle d
530      ON r.land   = d.land
531     AND r.stelle = d.stelle
532  WHERE r.endet IS NULL AND d.endet IS NULL ;
533COMMENT ON VIEW baurecht
534 IS 'Datenanalyse: EnstschlÃŒsselte Felder zu einer FlÀche des Baurechts.';
535
536-- Man glaubt es kaum, aber im ALKIS haben Gemeinde und Gemarkung keinerlei Beziehung miteinander
537-- Nur durch Auswertung der FlurstÃŒcke kann man ermitteln, in welcher Gemeinde eine Gemarkung liegt.
538CREATE OR REPLACE VIEW gemarkung_in_gemeinde
539AS
540  SELECT DISTINCT land, regierungsbezirk, kreis, gemeinde, gemarkungsnummer
541  FROM            ax_flurstueck
542  WHERE           endet IS NULL
543  ORDER BY        land, regierungsbezirk, kreis, gemeinde, gemarkungsnummer;
544COMMENT ON VIEW gemarkung_in_gemeinde
545 IS 'Welche Gemarkung liegt in welcher Gemeinde? Durch Verweise aus FlurstÃŒck.';
546
547
548-- Untersuchen, welche Geometrie-Typen vorkommen
549CREATE OR REPLACE VIEW arten_von_flurstuecksgeometrie
550AS
551 SELECT   count(gml_id) as anzahl,
552          st_geometrytype(wkb_geometry)
553 FROM     ax_flurstueck
554 WHERE    endet IS NULL
555 GROUP BY st_geometrytype(wkb_geometry);
556COMMENT ON VIEW arten_von_flurstuecksgeometrie IS 'Datenanalyse: vorkommende Geometry-Typen in Tabelle ax_flurstueck.';
557
558
559-- A d r e s s e n
560
561-- Verschluesselte Lagebezeichnung (Strasse und Hausnummer) fuer eine Gemeinde
562-- Schluessel der Gemeinde nach Bedarf anpassen!
563CREATE OR REPLACE VIEW adressen_hausnummern
564AS
565    SELECT
566        s.bezeichnung AS strassenname,
567        g.bezeichnung AS gemeindename,
568        l.land,
569        l.regierungsbezirk,
570        l.kreis,
571        l.gemeinde,
572        l.lage        AS strassenschluessel,
573        l.hausnummer
574    FROM   ax_lagebezeichnungmithausnummer l 
575    JOIN   ax_gemeinde g
576      ON l.kreis=g.kreis
577     AND l.gemeinde=g.gemeinde
578    JOIN   ax_lagebezeichnungkatalogeintrag s
579      ON l.kreis=s.kreis
580     AND l.gemeinde=s.gemeinde
581     AND l.lage = s.lage
582    WHERE l.gemeinde = 40;  -- "40" = Stadt Lage
583COMMENT ON VIEW adressen_hausnummern IS 'Datenanalyse: VerschlÃŒsselte Lagebezeichnung (Straße und Hausnummer) fÃŒr eine Gemeinde. SchlÃŒssel der Gemeinde nach Bedarf anpassen.';
584
585-- Zuordnung dieser Adressen zu Flurstuecken
586-- Schluessel der Gemeinde nach Bedarf anpassen!
587CREATE OR REPLACE VIEW adressen_zum_flurstueck
588AS
589    SELECT
590           f.gemarkungsnummer,
591           f.flurnummer,
592           f.zaehler,
593           f.nenner,
594           g.bezeichnung AS gemeindename,
595           s.bezeichnung AS strassenname,
596           l.lage        AS strassenschluessel,
597           l.hausnummer
598      FROM   ax_flurstueck f
599      JOIN   alkis_beziehungen v
600        ON f.gml_id=v.beziehung_von
601      JOIN   ax_lagebezeichnungmithausnummer l 
602        ON l.gml_id=v.beziehung_zu
603      JOIN   ax_gemeinde g
604        ON l.kreis=g.kreis
605       AND l.gemeinde=g.gemeinde
606      JOIN   ax_lagebezeichnungkatalogeintrag s
607        ON l.kreis=s.kreis
608       AND l.gemeinde=s.gemeinde
609       AND l.lage = s.lage
610     WHERE v.beziehungsart='weistAuf'
611       AND l.gemeinde = 40  -- "40" = Stadt Lage
612     ORDER BY f.gemarkungsnummer, f.flurnummer, f.zaehler, f.nenner;
613COMMENT ON VIEW adressen_zum_flurstueck IS 'Datenanalyse: Zuordnung von Adressen zu Flurstuecken. SchlÃŒssel der Gemeinde nach Bedarf anpassen.';
614
615-- Punktförmige  P r À s e n t a t i o n s o b j e k t e  (ap_pto)
616-- Ermittlung der vorkommenden Arten
617CREATE OR REPLACE VIEW beschriftung_was_kommt_vor
618AS
619  SELECT DISTINCT art, horizontaleausrichtung, vertikaleausrichtung
620    FROM ap_pto
621   WHERE not schriftinhalt is null
622  ORDER BY art;
623COMMENT ON VIEW beschriftung_was_kommt_vor IS 'Analyse der vorkommenden Kombinationen in ap_pto (Beschriftung)';
624
625-- Ergebnis:
626-- 2013: PostNAS 0.7  (aus 150,260,340)
627-- ------------------
628--      "AOG_AUG"                               "zentrisch";"Basis"  - Schriftinhalkt immer nur "I" ?
629--      "BWF"                                   "zentrisch";"Basis"/"zentrisch";"Mitte"
630--      "BWF_ZUS"                               "zentrisch";"Basis"
631--      "FKT"                                   "zentrisch";"Basis"/"linksbÃŒndig";"Basis"/"zentrisch";"Mitte"
632--      "FKT_TEXT"                              "zentrisch";"Mitte"
633--      "FreierText"                    "zentrisch";"Basis"/"zentrisch";"Mitte"/"linksbÃŒndig";"Basis"
634--      "FreierTextHHO"                 "zentrisch";"Mitte"
635--      "Friedhof"                              "zentrisch";"Basis"
636--      "Gewanne"                               "zentrisch";"Basis"/"zentrisch";"Mitte"
637--      "GFK"                                   "zentrisch";"Basis"/"zentrisch";"Mitte"
638--      "HNR"                                   "zentrisch";"Basis"/"linksbÃŒndig";"Basis"/"zentrisch";"Mitte"  --> Hausnummer, group gebaeude
639--      "HHO"                                   "zentrisch";"Mitte"  -- HHO = objekthoehe zu ax_gebaeude?
640--      "NAM"                                   "zentrisch";"Basis"/"zentrisch";"Mitte"/"linksbÃŒndig";"Basis"
641--      "SPO"                                   "zentrisch";"Basis"/
642--      "Vorratsbehaelter"              "zentrisch";"Basis"
643--      "WeitereHoehe"                  "zentrisch";"Mitte"
644--      "ZAE_NEN"                               "zentrisch";"Basis"
645--      "ZNM"                                   "zentrisch";"Basis"/"linksbÃŒndig";"Basis"
646
647--* Layer "ap_pto_stra"
648--                          hor ; ver / hor ; ver
649--      "BezKlassifizierungStrasse" "zent.";"Basis"     / "linksbÃŒndig";"Basis"
650--      "Platz"                                 "zentrisch";"Basis" / "zentrisch";"Mitte"
651--      "Strasse"                               "zentrisch";"Basis" / "zentrisch";"Mitte" / "linksbÃŒndig";"Basis"
652--      "Weg"                                   "zentrisch";"Basis" / "zentrisch";"Mitte" / "linksbÃŒndig";"Basis"
653
654--* geplanter layer "ap_pto_wasser"
655--      "StehendesGewaesser"    "zentrisch";"Basis"
656--      "Fliessgewaesser"               "zentrisch";"Basis"/"linksbÃŒndig";"Basis"
657
658
659-- FlurstÃŒcke eines EigentÃŒmers
660-- ----------------------------
661
662-- Dieser View liefert nur die (einfache) Buchungsart "GrundstÃŒck"
663-- Solche FÀlle wie "Erbbaurecht an GrundstÌck" oder "Wohnungs-/Teileigentum an aufgeteiltes GrundstÌck"
664-- oder "Miteigentum an aufteteiltes GrundstÃŒck" fehlen in deisere Auswertung.
665-- Dazu siehe: "rechte_eines_eigentuemers".
666
667-- Das Ergbenis ist gedacht fÃŒr den Export als CSV und Weiterverarbeitung mit einer Tabellenkalkulation
668-- oder einer einfachen Datenbank.
669
670-- Auch ein Export als Shape ist moeglich (dafuer: geom hinzugefuegt, Feldnamen gekuerzt)
671-- Kommando:
672--  pgsql2shp -h localhost -p 5432 -f "/data/.../alkis_fs_gemeinde.shp"  [db-name]  public.flurstuecke_eines_eigentuemers
673
674-- Übersicht der Tabellen:
675--
676-- Person <benennt< NamNum. >istBestandteilVon> Blatt <istBestandteilVon< Stelle >istGebucht> Flurstueck
677--                                              *-> Bezirk                *-> Buchungsart     *-> Gemarkung
678
679-- Wobei ">xxx>" = JOIN ÃŒber die Verbindungs-Tabelle "alkis_beziehungen" mit der Beziehungsart "xxx".
680
681CREATE OR REPLACE VIEW flurstuecke_eines_eigentuemers
682AS
683   SELECT
684      k.bezeichnung                AS gemarkung,
685      k.gemarkungsnummer           AS gemkg_nr,
686      f.flurnummer                 AS flur,
687      f.zaehler                    AS fs_zaehler,
688      f.nenner                     AS fs_nenner,
689      f.amtlicheflaeche            AS flaeche,
690      f.wkb_geometry               AS geom,  -- fuer Export als Shape
691   -- g.bezirk,
692      b.bezeichnung                AS bezirkname,
693      g.buchungsblattnummermitbuchstabenerweiterung AS gb_blatt,
694      g.blattart,
695      s.laufendenummer             AS bvnr,
696      art.bezeichner               AS buchgsart,
697   -- s.zaehler || '/' || s.nenner AS buchg_anteil,
698      n.laufendenummernachdin1421  AS name_num,
699   -- n.zaehler || '/' || n.nenner AS nam_anteil,
700      p.nachnameoderfirma          AS nachname --,
701   -- p.vorname
702   FROM       ax_person              p
703        JOIN  alkis_beziehungen      bpn  ON bpn.beziehung_zu  = p.gml_id
704        JOIN  ax_namensnummer        n    ON bpn.beziehung_von =n.gml_id
705        JOIN  alkis_beziehungen      bng  ON n.gml_id = bng.beziehung_von
706        JOIN  ax_buchungsblatt       g    ON bng.beziehung_zu = g.gml_id
707        JOIN  ax_buchungsblattbezirk b    ON g.land = b.land AND g.bezirk = b.bezirk
708        JOIN  alkis_beziehungen      bgs  ON bgs.beziehung_zu = g.gml_id
709        JOIN  ax_buchungsstelle      s    ON s.gml_id = bgs.beziehung_von
710        JOIN  ax_buchungsstelle_buchungsart art ON s.buchungsart = art.wert
711        JOIN  alkis_beziehungen      bsf  ON bsf.beziehung_zu = s.gml_id
712        JOIN  ax_flurstueck          f    ON f.gml_id = bsf.beziehung_von
713        JOIN  ax_gemarkung           k    ON f.land = k.land AND f.gemarkungsnummer = k.gemarkungsnummer
714   WHERE p.nachnameoderfirma LIKE 'Gemeinde %'   -- ** Bei Bedarf anpassen!
715     AND bpn.beziehungsart = 'benennt'           -- Namennummer     >> Person
716     AND bng.beziehungsart = 'istBestandteilVon' -- Namensnummer    >> Grundbuch
717     AND bgs.beziehungsart = 'istBestandteilVon' -- Buchungs-Stelle >> Grundbuch
718     AND bsf.beziehungsart = 'istGebucht'        -- Flurstueck      >> Buchungs-Stelle
719     AND p.endet IS NULL AND n.endet IS NULL AND g.endet IS NULL AND b.endet IS NULL
720     AND s.endet IS NULL AND f.endet IS NULL AND k.endet IS NULL
721   ORDER BY k.bezeichnung, f.flurnummer, f.zaehler, f.nenner, g.bezirk, g.buchungsblattnummermitbuchstabenerweiterung, s.laufendenummer;
722COMMENT ON VIEW flurstuecke_eines_eigentuemers IS 'Muster fÃŒr Export: Suchkriteriumnach Bedarf anpassen.';
723
724-- Rechte eines EigentÃŒmers
725-- ------------------------
726-- Dieser View sucht speziell die FÀlle wo eine Buchungsstelle ein Recht "an" einer anderen Buchungsstelle hat.
727--  - "Erbbaurecht *an* GrundstÃŒck"
728--  - "Wohnungs-/Teileigentum *an* Aufgeteiltes GrundstÃŒck"
729--  - "Miteigentum *an* Aufteteiltes GrundstÃŒck"
730-- Suchkriterium ist der Name des EigentÃŒmers auf dem "herrschenden" Grundbuch, also dem Besitzer des Rechtes.
731
732-- Diese FÀlle fehlen im View "flurstuecke_eines_eigentuemers".
733
734-- Übersicht der Tabellen:
735-- Person <benennt< NamNum. >istBestandteilVon> Blatt <istBestandteilVon< Stelle-h >an> Stelle-d >istGebucht> Flurstueck
736-- Wobei ">xxx>" = JOIN ÃŒber die Verbindungs-Tabelle "alkis_beziehungen" mit der Beziehungsart "xxx".
737
738CREATE OR REPLACE VIEW rechte_eines_eigentuemers
739AS
740   SELECT
741      k.bezeichnung                AS gemarkung,
742      k.gemarkungsnummer           AS gemkg_nr,
743      f.flurnummer                 AS flur,
744      f.zaehler                    AS fs_zaehler,
745      f.nenner                     AS fs_nenner,
746      f.amtlicheflaeche            AS flaeche,
747      f.wkb_geometry               AS geom,  -- fuer Export als Shape
748   -- g.bezirk,
749      b.bezeichnung                AS bezirkname,
750      g.buchungsblattnummermitbuchstabenerweiterung AS gb_blatt,
751   -- g.blattart,
752      sh.laufendenummer            AS bvnr_herr,
753      sh.zaehler || '/' || sh.nenner AS buchg_anteil_herr,
754      arth.bezeichner              AS buchgsa_herr,
755      bss.beziehungsart            AS bez_art,
756      artd.bezeichner              AS buchgsa_dien,
757      sd.laufendenummer            AS bvnr_dien,
758   -- sd.zaehler || '/' || sd.nenner AS buchg_anteil_dien,
759      n.laufendenummernachdin1421  AS name_num,
760   -- n.zaehler || '/' || n.nenner AS nam_anteil,
761      p.nachnameoderfirma          AS nachname --, 
762   -- p.vorname
763   FROM       ax_person              p
764        JOIN  alkis_beziehungen      bpn  ON bpn.beziehung_zu  = p.gml_id
765        JOIN  ax_namensnummer        n    ON bpn.beziehung_von =n.gml_id
766        JOIN  alkis_beziehungen      bng  ON n.gml_id = bng.beziehung_von
767        JOIN  ax_buchungsblatt       g    ON bng.beziehung_zu = g.gml_id
768        JOIN  ax_buchungsblattbezirk b    ON g.land = b.land AND g.bezirk = b.bezirk
769        JOIN  alkis_beziehungen      bgs  ON bgs.beziehung_zu = g.gml_id
770        JOIN  ax_buchungsstelle      sh   ON sh.gml_id = bgs.beziehung_von  -- herrschende Buchung
771        JOIN  ax_buchungsstelle_buchungsart arth ON sh.buchungsart = arth.wert
772        JOIN  alkis_beziehungen      bss  ON sh.gml_id = bss.beziehung_von
773        JOIN  ax_buchungsstelle      sd   ON sd.gml_id = bss.beziehung_zu   -- dienende Buchung
774        JOIN  ax_buchungsstelle_buchungsart artd ON sd.buchungsart = artd.wert
775        JOIN  alkis_beziehungen      bsf  ON bsf.beziehung_zu = sd.gml_id
776        JOIN  ax_flurstueck          f    ON f.gml_id = bsf.beziehung_von
777        JOIN  ax_gemarkung           k    ON f.land = k.land AND f.gemarkungsnummer = k.gemarkungsnummer
778   WHERE p.nachnameoderfirma LIKE 'Stadt %'   -- ** Bei Bedarf anpassen!
779     AND bpn.beziehungsart = 'benennt'           -- Namennummer     >> Person
780     AND bng.beziehungsart = 'istBestandteilVon' -- Namensnummer    >> Grundbuch
781     AND bgs.beziehungsart = 'istBestandteilVon' -- B-Stelle herr   >> Grundbuch
782     AND bss.beziehungsart in ('an','zu')        -- B-Stelle herr.  >> B-Stelle dien.
783     AND bsf.beziehungsart = 'istGebucht'        -- Flurstueck      >> B-Stelle dien
784     AND p.endet IS NULL AND n.endet IS NULL AND g.endet IS NULL AND b.endet IS NULL
785     AND sh.endet IS NULL AND sd.endet IS NULL AND f.endet IS NULL AND k.endet IS NULL
786   ORDER BY k.bezeichnung, f.flurnummer, f.zaehler, f.nenner, g.bezirk, g.buchungsblattnummermitbuchstabenerweiterung, sh.laufendenummer;
787COMMENT 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.';
788
789-- Die 2 Views nur fuer Entwicklung:
790
791--      CREATE OR REPLACE VIEW beziehungen_redundant
792--      AS
793--       SELECT *
794--         FROM alkis_beziehungen AS bezalt
795--         WHERE EXISTS
796--                 (SELECT ogc_fid
797--                       FROM alkis_beziehungen AS bezneu
798--                      WHERE bezalt.beziehung_von = bezneu.beziehung_von
799--                        AND bezalt.beziehung_zu  = bezneu.beziehung_zu
800--                        AND bezalt.beziehungsart = bezneu.beziehungsart
801--                        AND bezalt.ogc_fid       < bezneu.ogc_fid
802--                      );
803--      COMMENT ON VIEW beziehungen_redundant IS 'Datenanalyse: alkis_beziehungen zu denen es eine identische neue Version gibt. Fehlersuche bei PostNAS-Trigger fÃŒr Replace.';
804--
805--      CREATE OR REPLACE VIEW beziehungen_redundant_in_delete
806--      AS
807--      SELECT *
808--       FROM alkis_beziehungen AS bezalt
809--       WHERE EXISTS
810--                 (SELECT ogc_fid
811--                       FROM alkis_beziehungen AS bezneu
812--                      WHERE bezalt.beziehung_von = bezneu.beziehung_von
813--                        AND bezalt.beziehung_zu  = bezneu.beziehung_zu
814--                        AND bezalt.beziehungsart = bezneu.beziehungsart
815--                        AND bezalt.ogc_fid       < bezneu.ogc_fid
816--                      )
817--               -- mit dem Zusatz nur die Faelle aus dem letzten Durchlauf,
818--               -- die aktuell noch in der Delete-Tabelle stehen
819--               AND EXISTS
820--                      (SELECT ogc_fid
821--                       FROM delete
822--                       WHERE bezalt.beziehung_von = substr(featureid, 1, 16)
823--                              OR bezalt.beziehung_zu  = substr(featureid, 1, 16)
824--                      );
825--      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.';
826
827
828-- Suche nach Fehler durch "Replace"
829-- Wenn ax_flurstueck ÃŒber "replace" ausgetauscht wird und dabei gleichzeitig eine andere
830-- Buchungsstelle bekommt, dann bleibt die alte Buchungsstelle in den alkis_beziehungen.
831-- Mail PostNAS Mailingliste von 2013-02-20
832CREATE OR REPLACE VIEW mehrfache_buchung_zu_fs
833AS
834  SELECT f.gml_id, count(b.ogc_fid) AS anzahl
835    FROM ax_flurstueck f
836    JOIN alkis_beziehungen b
837      ON f.gml_id = b.beziehung_von
838  WHERE b.beziehungsart = 'istGebucht'
839  GROUP BY f.gml_id
840  HAVING count(b.ogc_fid) > 1;
841
842-- Noch einfacher? - Auch ohne JOIN wird das selbe Ergebnis geliefert.
843-- Doppelte Verweise zÀhlen ohne zu prÌfen, ob die gml_id in ax_flurstueck existiert.
844--   SELECT b.beziehung_von, count(b.ogc_fid) AS anzahl
845--     FROM alkis_beziehungen b
846--    WHERE b.beziehungsart = 'istGebucht'
847--   GROUP BY b.beziehung_von
848--   HAVING count(b.ogc_fid) > 1;
849
850COMMENT ON VIEW mehrfache_buchung_zu_fs
851 IS 'Fehler: Nach replace von ax_flurtstueck mit einer neuen ax_buchungsstelle bleibt die alte Verbindung in alkis_beziehungen';
852
853
854-- Suche nach Fehler durch "Replace"
855-- Eine Hausnummer darf nur einem Gebaeude zugeordnet werden.
856-- Das verschieben der Relation
857--   ax_gebaeude   >von>zeigtAuf>zu>  ax_lagebezeichnungmithausnummer
858-- fuehrt möglicherweise dazu, dass die alte Relation nicht gelöscht wird.
859-- Die angezeigten FÀlle sind potentielle Fehler.
860
861CREATE OR REPLACE VIEW fehler_hausnummer_mehrfach_verwendet
862AS
863 SELECT l.gml_id, l.gemeinde, l.lage, l.hausnummer
864   FROM ax_gebaeude g
865   JOIN alkis_beziehungen b ON b.beziehung_von = g.gml_id
866   JOIN ax_lagebezeichnungmithausnummer l ON b.beziehung_zu = l.gml_id
867  WHERE b.beziehungsart = 'zeigtAuf'
868  GROUP BY l.gml_id, l.gemeinde, l.lage, l.hausnummer
869  HAVING count(g.gml_id) > 1;
870
871COMMENT ON VIEW fehler_hausnummer_mehrfach_verwendet
872 IS 'Fehler: Nach replace von ax_lagebezeichnungmithausnummer mit einem neuen ax_gebaeude bleibt die alte Verbindung in alkis_beziehungen';
873
874
875-- Der umgekehrt Fall ist erlaubt.
876-- GebÀude hat mehrere Nummern.
877
878CREATE OR REPLACE VIEW adressen_zu_gebauede_mit_mehreren_hausnummern
879AS
880 SELECT l.gml_id, l.gemeinde, l.lage, l.hausnummer -- Anzeige der Adressfelder
881 FROM ax_gebaeude g1
882   JOIN alkis_beziehungen b ON b.beziehung_von = g1.gml_id
883   JOIN ax_lagebezeichnungmithausnummer l ON b.beziehung_zu = l.gml_id
884  WHERE b.beziehungsart = 'zeigtAuf' AND g1.gml_id IN -- Subquery sucht GebÀude mit meherern Hausnummen
885   (SELECT g2.gml_id
886    FROM ax_gebaeude g2
887    JOIN alkis_beziehungen b ON b.beziehung_von = g2.gml_id
888    JOIN ax_lagebezeichnungmithausnummer l ON b.beziehung_zu = l.gml_id
889   WHERE b.beziehungsart = 'zeigtAuf'
890   GROUP BY g2.gml_id
891   HAVING count(l.gml_id) > 1);
892
893COMMENT ON VIEW adressen_zu_gebauede_mit_mehreren_hausnummern
894 IS 'GebÀude mit mehreren Hausnummern suchen (ist erlaubt) und dazu die Adressen anzeigen.';
895
896
897-- Analyse der Buchungs-Arten im Bestand
898CREATE OR REPLACE VIEW buchungsarten_vorkommend
899AS
900  SELECT a.wert, a.bezeichner,
901         count(b.gml_id) AS anzahl_buchungen
902    FROM ax_buchungsstelle_buchungsart a
903    JOIN ax_buchungsstelle b  ON a.wert = b.buchungsart
904GROUP BY a.wert, a.bezeichner
905ORDER BY a.wert, a.bezeichner;
906
907COMMENT ON VIEW buchungsarten_vorkommend
908 IS 'Welche Arten von Buchungsart kommen in dieser Datenbank tÀtsÀchlich vor?.';
909
910
911-- Analyse: FÀlle mit Erbbaurecht
912-- Benutzt den Baustein-View "doppelverbindung"
913CREATE OR REPLACE VIEW erbbaurechte_suchen
914AS
915  SELECT f.gml_id,
916  --f.flurstueckskennzeichen,
917    f.gemarkungsnummer || '-' || f.flurnummer || '-' || f.zaehler AS fssuch, f.nenner
918   FROM ax_flurstueck    f
919   JOIN doppelverbindung d     -- beide FÀlle ÃŒber Union-View: direkt und ÃŒber Recht von BS an BS
920     ON d.fsgml = f.gml_id
921   JOIN ax_buchungsstelle s    -- Buchungs-Stelle
922     ON d.bsgml = s.gml_id
923   WHERE s.buchungsart = 2101;
924
925COMMENT ON VIEW erbbaurechte_suchen
926 IS 'Suche nach FÀllen mit Buchungsrt 2101=Erbbaurecht';
927
928
929-- Probleme mit der Trigger-Function "update_fields_beziehungen()"
930-- Manchmal kann zu einer gml_id in "alkis_beziehungen" die zustÀndige Tabelle nicht gefunden werden.
931-- Nach Änderung der Trigger-Function am 10.12.2013 wird die Beziehung trotzdem eingetragen,
932-- nur die Felder "von_typename" und "beginnt" bleiben leer.
933-- 2014-01-31: Dieser Trigger wird nicht mehr verwendet.
934
935     -- Diese FÀlle anzeigen:
936--     CREATE OR REPLACE VIEW beziehungsproblem_faelle
937--    AS
938--       SELECT *
939--        FROM alkis_beziehungen
940--        WHERE beginnt IS NULL;
941--     COMMENT ON VIEW beziehungsproblem_faelle
942--      IS 'Fehlersuche: Im Trigger "update_fields_beziehungen()" wurde das Objekt in seiner Tabelle nicht gefunden, darum kein "beginnt" in "alkis_beziehungen" eingetragen.';
943
944     -- Wie viele sind das?
945--     CREATE OR REPLACE VIEW beziehungsproblem_zaehler
946--     AS
947--       SELECT count(ogc_fid) AS anzahl
948--         FROM alkis_beziehungen
949--        WHERE beginnt IS NULL;
950--     COMMENT ON VIEW beziehungsproblem_faelle
951--      IS 'Fehlersuche: Wie oft fehlt das beginnt-Feld in alkis_beziehungen?';
952
953
954-- Suchen von Gewannenbezeichnungen, die auch als Straßenname verwendet werden.
955-- Diese FÀlle fÃŒhren möglicherweise zu unvollstÀndiger Ausgabe beim Export "alle FlurstÃŒcke an einer Straße"
956-- weil nur Lagebezeichnung MIT und OHNE Hausnummer gesucht wird, aber keine gleich lautende Gewanne.
957CREATE OR REPLACE VIEW strasse_als_gewanne
958AS
959  SELECT k.gemeinde, k.lage AS strassenschluessel,
960      -- k.bezeichnung      AS strassenname,
961         o.unverschluesselt AS gewanne,
962         count(fo.gml_id) AS anzahl_fs_gewanne
963  FROM ax_lagebezeichnungkatalogeintrag k   -- Straßentabelle
964  JOIN ax_lagebezeichnungohnehausnummer o   -- Gewanne
965    ON k.bezeichnung = o.unverschluesselt   -- Gleiche Namen
966  -- Join Gewanne auf FlurstÃŒcke um nur solche FÀlle anzuzeigen, die verwendet werden
967  -- UND die auch in der gleichen Gemeinde liegen.
968  -- Sonst könnte zufÀllige Namensgleichheiten aus verschiedenen Gemeinden geben.
969  JOIN alkis_beziehungen vo
970    ON o.gml_id=vo.beziehung_zu AND vo.beziehungsart= 'zeigtAuf'
971  JOIN ax_flurstueck fo
972    ON fo.gml_id=vo.beziehung_von
973 WHERE fo.gemeinde = k.gemeinde  -- Gewanne wird fÃŒr ein Flst. in gleicher Gemeinde verwendet, wie der StraßenschlÃŒssel
974  GROUP BY k.gemeinde, k.lage, o.unverschluesselt --, k.bezeichnung
975  ORDER BY k.gemeinde, k.lage, o.unverschluesselt --, k.bezeichnung
976  ;
977
978COMMENT ON VIEW strasse_als_gewanne
979 IS 'Gewannenbezeichnungen, die auch als Straßenname verwendet werden. Mit FlurstÃŒcks-ZÀhler.';
980
981
982-- Wie zuvor, aber die FlurstÌcke werden hier nicht nur gezÀhlt sondern auch aufgelistet.
983-- das Format des FlusrtÃŒckskennzeichens kann in die Mapbender-Navigation eingegeben werden.
984CREATE OR REPLACE VIEW strasse_als_gewanne_flst
985AS
986  SELECT -- fo.gml_id,
987         fo.gemarkungsnummer || '-' || fo.flurnummer || '-' || fo.zaehler::text || COALESCE ('/' || fo.nenner::text, '') AS flstkennz,
988         k.gemeinde,
989         o.unverschluesselt AS gewanne,
990      -- k.bezeichnung AS strassenname,
991         k.lage        -- AS strassen_schluessel
992  FROM ax_lagebezeichnungkatalogeintrag k   -- Straßentabelle
993  JOIN ax_lagebezeichnungohnehausnummer o   -- Gewanne
994    ON k.bezeichnung = o.unverschluesselt   -- Gleiche Namen
995  JOIN alkis_beziehungen vo
996    ON o.gml_id=vo.beziehung_zu AND vo.beziehungsart= 'zeigtAuf'
997  JOIN ax_flurstueck fo
998    ON fo.gml_id=vo.beziehung_von
999 WHERE fo.gemeinde = k.gemeinde  -- Gewanne wird fÃŒr ein Flst. in gleicher Gemeinde verwendet, wie der StraßenschlÃŒssel
1000  ORDER BY fo.gemarkungsnummer, fo.flurnummer, fo.zaehler, k.gemeinde, k.bezeichnung;
1001
1002COMMENT ON VIEW strasse_als_gewanne_flst
1003 IS 'FlurstÃŒcke mit Gewannenbezeichnungen, die auch als Straßenname verwendet werden.';
1004
1005
1006
1007-- Suche nach Fehlern in den Daten, die moeglicherweise aus der Migration stammen und
1008-- im Rahmen der Nachmigration noch korrigiert werden muessen.
1009
1010CREATE OR REPLACE VIEW nachmigration_aehnliche_anschriften
1011AS
1012  SELECT DISTINCT p.gml_id, p.nachnameoderfirma, p.vorname,
1013        a1.ort_post, a1.strasse AS strasse1, a2.strasse AS strasse2, a1.hausnummer
1014     -- , b1.import_id AS import1, b2.import_id AS import2
1015    FROM ax_person         p
1016    JOIN alkis_beziehungen b1 ON b1.beziehung_von=p.gml_id
1017    JOIN ax_anschrift      a1 ON a1.gml_id=b1.beziehung_zu
1018    JOIN alkis_beziehungen b2 ON b2.beziehung_von=p.gml_id
1019    JOIN ax_anschrift      a2 ON a2.gml_id=b2.beziehung_zu
1020    WHERE b1.beziehungsart='hat'
1021      AND b2.beziehungsart='hat'
1022      AND a1.gml_id    <>  a2.gml_id
1023      AND a1.ort_post   =  a2.ort_post
1024      AND a1.strasse    like trim(a2.strasse, '.') || '%'
1025      AND a1.hausnummer =  a2.hausnummer
1026    ORDER BY p.nachnameoderfirma, p.vorname;
1027
1028COMMENT ON VIEW nachmigration_aehnliche_anschriften
1029 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.';
1030
1031
1032-- END --
Note: See TracBrowser for help on using the repository browser.