source: trunk/import/sichten.sql @ 308

Revision 308, 42.0 KB checked in by frank.jaeger, 7 years ago (diff)

CSV-Export aller Flurstücke an einer Straße.

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