source: trunk/import/norgis_alkis_pp/postcreate.de/views_buchungsketten.sql @ 398

Revision 396, 15.3 KB checked in by frank.jaeger, 6 years ago (diff)
Line 
1
2-- ====================================================================================================
3--  ALKIS-PostGIS  FlurstÃŒcke Suchen, die eine Verkettung von mehreren Buchungsstellen haben
4-- ====================================================================================================
5
6-- Aufgaben:
7-- ---------
8-- FlurstÃŒcke ermitteln die 2 bis 4 (oder mehr?) Buchungsstellen haben die jeweils ein "Recht an" einer anderen Buchungsstelle haben.
9-- Beispiel:
10--   "Wohnungs-/Teiluntererbbaurecht" >an> "Aufgeteiltes Untererbbaurecht WEG" >an> "Erbbaurecht" >an> "GrundstÃŒck" >Buchung> FlurstÃŒck
11-- In einem WMS diese besonderen Buchungen hervorheben.
12-- Die betroffenen Buchungsarten auflisten.
13-- Auch einige EinzelfÀlle selektieren.
14-- Dies dient zunÀchst dazu, um TestfÀlle fÌr die Weiterentwicklung der Buchauskunft zu finden (Entwicklung).
15-- Vielleicht hat auch ein Anwender Verwendung dafÃŒr.
16
17-- AusfÃŒhrung in:
18-- Step "postcreate.d" des ALKIS-Importers. Hier also nur Definitionen machen, keine Daten bearbeiten.
19
20--Stand
21--  2017-12-07 Prototyp
22
23-- V i e w s
24-- =================================
25
26-- Views fÃŒr die Darstellung im WMS
27-- =================================
28
29-- 2 beteiligte Buchungsstellen
30-- "Erbbaurecht" und Àhnliches
31-- --------------------------
32-- FS >istGebucht> Buchungstelle 1  <an<  Buchungstelle 2
33-- --------------------------------------------------------------------
34   DROP VIEW IF EXISTS buchungsrechte_2arten;
35   DROP VIEW IF EXISTS buchungsrechte_2wms;
36CREATE OR REPLACE VIEW buchungsrechte_2wms
37AS
38 SELECT DISTINCT                    -- Ohne DISTINCT maherfache Überlagerung
39    f.gml_id,                       -- Unique Key
40    s2.buchungsart,                 -- verschlÃŒsselt (Nummer)
41    f.wkb_geometry
42 --, wb.v      AS bu_art            -- Buchungsart entschlÃŒsselt  -- Hier nicht!
43  FROM ax_flurstueck     f          -- FlurstÃŒck
44  JOIN ax_buchungsstelle s1         -- dienende Buchung
45    ON f.istgebucht = s1.gml_id
46  JOIN ax_buchungsstelle s2         -- herrschende Buchung
47    ON s1.gml_id = ANY(s2.an)       -- hat Recht an
48--JOIN alkis_wertearten wb          -- EntschlÃŒsseln "Buchungsart"
49--  ON cast(s2.buchungsart AS character varying) = wb.k
50-- AND wb.element = 'ax_buchungsstelle' AND wb.bezeichnung = 'buchungsart'
51  WHERE f.endet IS NULL AND s1.endet IS NULL AND s2.endet IS NULL;
52
53COMMENT ON VIEW buchungsrechte_2wms IS 'FÃŒr WMS-Anzeige von FlurstÃŒcken mit Buchungsarten mit 2 beteiligten Buchungsstellen, z.B. Erbbaurecht.';
54GRANT SELECT ON TABLE public.buchungsrechte_2wms  TO ms6;
55
56
57-- 3 beteiligte Buchungsstellen
58-- "Untererbbaurecht" und Àhnliches
59-- --------------------------------
60-- FS >istGebucht> Buchungstelle 1  <an<  Buchungstelle 2 <an<  Buchungstelle 3
61-- ------------------------------------------------------------------------------------------------------------------
62   DROP VIEW IF EXISTS buchungsrechte_3arten;
63   DROP VIEW IF EXISTS buchungsrechte_3wms;
64CREATE OR REPLACE VIEW buchungsrechte_3wms
65AS
66 SELECT DISTINCT f.gml_id, s3.buchungsart, f.wkb_geometry
67   FROM ax_flurstueck     f 
68   JOIN ax_buchungsstelle s1 ON f.istgebucht = s1.gml_id
69   JOIN ax_buchungsstelle s2 ON s1.gml_id = ANY(s2.an)   
70   JOIN ax_buchungsstelle s3 ON s2.gml_id = ANY(s3.an) 
71  WHERE f.endet IS NULL AND s1.endet IS NULL AND s2.endet IS NULL AND s3.endet IS NULL;
72
73COMMENT ON VIEW buchungsrechte_3wms IS 'FÃŒr WMS-Anzeige von FlurstÃŒcken mit Buchungsarten mit 3 beteiligten Buchungsstellen, z.B. Untererbbaurecht.';
74GRANT SELECT ON TABLE public.buchungsrechte_3wms  TO ms6;
75-- z.B. 69 FlurstÃŒcke in Lage in 312 msec.
76
77
78-- 4 beteiligte Buchungsstellen
79-- Teil-Untererbbaurecht
80-- --------------------------------
81-- FS >istGebucht> Buchungstelle 1  <an<  Buchungstelle 2 <an<  Buchungstelle 3 <an<  Buchungstelle 4
82-- ------------------------------------------------------------------------------------------------------------------
83   DROP VIEW IF EXISTS buchungsrechte_4arten;
84   DROP VIEW IF EXISTS buchungsrechte_4wms;
85CREATE OR REPLACE VIEW buchungsrechte_4wms
86AS
87 SELECT DISTINCT f.gml_id, s4.buchungsart, f.wkb_geometry
88  FROM ax_flurstueck     f 
89  JOIN ax_buchungsstelle s1 ON f.istgebucht = s1.gml_id
90  JOIN ax_buchungsstelle s2 ON s1.gml_id = ANY(s2.an)   
91  JOIN ax_buchungsstelle s3 ON s2.gml_id = ANY(s3.an)
92  JOIN ax_buchungsstelle s4 ON s3.gml_id = ANY(s4.an) 
93 WHERE f.endet IS NULL AND s1.endet IS NULL AND s2.endet IS NULL AND s3.endet IS NULL AND s4.endet IS NULL;
94
95COMMENT ON VIEW buchungsrechte_4wms IS 'FÃŒr WMS-Anzeige von FlurstÃŒcken mit Buchungsarten mit 4 beteiligten Buchungsstellen.';
96GRANT SELECT ON TABLE public.buchungsrechte_4wms  TO ms6;
97-- 6 FlurstÃŒcke im Kreis Minden-LÃŒbbecke,
98-- 3 FlurstÃŒcke in Lage in 180 msec. ("DENW17AL0000VffJ" "DENW17AL0000VnuJ" "DENW17AL0000Vwe1")
99
100
101-- Gibts das?  Nein!
102-- --------------------------------
103-- FS >istGebucht> Buchungstelle 1  <an<  Buchungstelle 2 <an<  Buchungstelle 3 <an<  Buchungstelle 4 <an<  Buchungstelle 5
104-- ------------------------------------------------------------------------------------------------------------------
105-- 5 beteiligte Buchungsstellen
106-- DROP VIEW IF EXISTS buchungsrechte_5wms;
107/*
108CREATE OR REPLACE VIEW buchungsrechte_5wms
109AS
110 SELECT DISTINCT f.gml_id, s5.buchungsart, f.wkb_geometry
111   FROM ax_flurstueck     f 
112   JOIN ax_buchungsstelle s1  ON f.istgebucht = s1.gml_id
113   JOIN ax_buchungsstelle s2  ON s1.gml_id = ANY (s2.an)   
114   JOIN ax_buchungsstelle s3  ON s2.gml_id = ANY (s3.an)
115   JOIN ax_buchungsstelle s4  ON s3.gml_id = ANY (s4.an) 
116   JOIN ax_buchungsstelle s5  ON s4.gml_id = ANY (s5.an) 
117  WHERE f.endet IS NULL AND s1.endet IS NULL AND s2.endet IS NULL AND s3.endet IS NULL AND s4.endet IS NULL AND s5.endet IS NULL;
118
119COMMENT ON VIEW buchungsrechte_5wms IS 'FÃŒr WMS-Anzeige von FlurstÃŒcken mit Buchungsarten mit 5 beteiligten Buchungsstellen.';
120GRANT SELECT ON TABLE public.buchungsrechte_5wms  TO ms6;
121*/
122
123-- Views fÃŒr die Modellierung der Classes im WMS
124-- =============================================
125-- Buchungsart entschlÃŒsseln. Die Treffer der WMS-Views weiter verdichten:
126
127CREATE OR REPLACE VIEW buchungsrechte_2arten AS
128 SELECT DISTINCT s.buchungsart, wb.v AS bu_art
129   FROM buchungsrechte_2wms s
130   JOIN alkis_wertearten wb -- EntschlÃŒsseln "Buchungsart"
131     ON cast(s.buchungsart AS character varying) = wb.k
132    AND wb.element = 'ax_buchungsstelle' AND wb.bezeichnung = 'buchungsart'
133  ORDER BY s.buchungsart;
134COMMENT ON VIEW buchungsrechte_2arten IS 'Vorkommende Buchungsarten bei der Verkettung von 2 Buchungsstellen.';
135-- 1301;"Wohnungs-/Teileigentum"
136-- 1302;"Miteigentum Par. 3 Abs. 4 GBO"
137-- 2101;"Erbbaurecht"
138-- 2201;"Aufgeteiltes Erbbaurecht WEG"
139
140CREATE OR REPLACE VIEW buchungsrechte_3arten AS
141 SELECT DISTINCT s.buchungsart, wb.v AS bu_art
142   FROM buchungsrechte_3wms s
143   JOIN alkis_wertearten wb
144     ON cast(s.buchungsart AS character varying) = wb.k
145    AND wb.element = 'ax_buchungsstelle' AND wb.bezeichnung = 'buchungsart'
146  ORDER BY buchungsart;
147COMMENT ON VIEW buchungsrechte_3arten IS 'Vorkommende Buchungsarten bei der Verkettung von 3 Buchungsstellen.';
148-- 2102;"Untererbbaurecht"
149-- 2202;"Aufgeteiltes Untererbbaurecht WEG"
150-- 2203;"Aufgeteiltes Recht Par. 3 Abs. 4 GBO"
151-- 2301;"Wohnungs-/Teilerbbaurecht"
152
153CREATE OR REPLACE VIEW buchungsrechte_4arten AS
154 SELECT DISTINCT s.buchungsart, wb.v AS bu_art
155   FROM buchungsrechte_4wms s
156   JOIN alkis_wertearten wb
157     ON cast(s.buchungsart AS character varying) = wb.k
158    AND wb.element = 'ax_buchungsstelle' AND wb.bezeichnung = 'buchungsart'
159  ORDER BY buchungsart;
160COMMENT ON VIEW buchungsrechte_4arten IS 'Vorkommende Buchungsarten bei der Verkettung von 4 Buchungsstellen.';
161-- 2302;"Wohnungs-/Teiluntererbbaurecht"
162
163
164-- Views um EinzelfÀlle zu suchen und aufzulisten
165-- ==============================================
166
167CREATE OR REPLACE VIEW buchungsrechte_4faelle
168AS
169 SELECT
170    f.gml_id, f.flurstueckskennzeichen,
171    s1.laufendenummer AS bvnr1, s1.buchungsart AS buchunsart_1, w1.v AS ba1, b1.buchungsblattnummermitbuchstabenerweiterung AS blatt1,
172    s2.laufendenummer AS bvnr2, s2.buchungsart AS buchunsart_2, w2.v AS ba2, b2.buchungsblattnummermitbuchstabenerweiterung AS blatt2,
173    s3.laufendenummer AS bvnr3, s3.buchungsart AS buchunsart_3, w3.v AS ba3, b3.buchungsblattnummermitbuchstabenerweiterung AS blatt3,
174    s4.laufendenummer AS bvnr4, s4.buchungsart AS buchunsart_4, w4.v AS ba4, b4.buchungsblattnummermitbuchstabenerweiterung AS blatt4
175
176  -- FlurstÃŒck
177  FROM ax_flurstueck     f 
178
179  -- 1. Buchung
180  JOIN ax_buchungsstelle s1 ON f.istgebucht = s1.gml_id
181  LEFT JOIN alkis_wertearten  w1 ON cast(s1.buchungsart AS character varying)=w1.k AND w1.element='ax_buchungsstelle' AND w1.bezeichnung='buchungsart'
182  JOIN ax_buchungsblatt  b1 ON s1.istbestandteilvon = b1.gml_id
183
184  -- 2. Buchung
185  JOIN ax_buchungsstelle s2 ON s1.gml_id = ANY(s2.an)
186  LEFT JOIN alkis_wertearten  w2 ON cast(s2.buchungsart AS character varying)=w2.k AND w2.element='ax_buchungsstelle' AND w2.bezeichnung='buchungsart'
187  JOIN ax_buchungsblatt  b2 ON s2.istbestandteilvon = b2.gml_id
188
189  -- 3. Buchung
190  JOIN ax_buchungsstelle s3 ON s2.gml_id = ANY(s3.an)
191  LEFT JOIN alkis_wertearten  w3 ON cast(s3.buchungsart AS character varying)=w3.k AND w3.element='ax_buchungsstelle' AND w3.bezeichnung='buchungsart'
192  JOIN ax_buchungsblatt  b3 ON s3.istbestandteilvon = b3.gml_id
193
194  -- 4. Buchung
195  JOIN ax_buchungsstelle s4 ON s3.gml_id = ANY(s4.an) 
196  LEFT JOIN alkis_wertearten  w4 ON cast(s4.buchungsart AS character varying)=w4.k AND w4.element='ax_buchungsstelle' AND w4.bezeichnung='buchungsart'
197  JOIN ax_buchungsblatt  b4 ON s4.istbestandteilvon = b4.gml_id
198
199 -- nur frische Sachen
200 WHERE f.endet  IS NULL
201   AND s1.endet IS NULL AND b1.endet IS NULL
202   AND s2.endet IS NULL AND b2.endet IS NULL
203   AND s3.endet IS NULL AND b3.endet IS NULL
204   AND s4.endet IS NULL AND b4.endet IS NULL
205 LIMIT 20;
206
207COMMENT ON VIEW buchungsrechte_4faelle IS 'FÃŒr Buchungsarten mit 4 beteiligten Buchungsstellen die einzelnen Kennzeichen tabellarisch auflisten.';
208
209
210CREATE OR REPLACE VIEW buchungsrechte_3text
211AS
212 SELECT
213    a3.v || ' (' || b3.blattart || ') ' || b3.buchungsblattnummermitbuchstabenerweiterung || ' (lfd. ' || s3.laufendenummer || ') hat ' || w3.v || ' (' || s3.buchungsart || ') an ' AS stufe3,
214    a2.v || ' (' || b2.blattart || ') ' || b2.buchungsblattnummermitbuchstabenerweiterung || ' (lfd. ' || s2.laufendenummer || ') hat ' || w2.v || ' (' || s2.buchungsart || ') an ' AS stufe2,
215    a1.v || ' (' || b1.blattart || ') ' || b1.buchungsblattnummermitbuchstabenerweiterung || ' (lfd. ' || s1.laufendenummer || ') hat ' || w1.v || ' (' || s1.buchungsart || ') mit Buchung ' AS stufe1,
216    'FlurstÃŒck ' || f.flurstueckskennzeichen || ' (gml_id=' || f.gml_id || ')' AS flurstueck
217
218  -- FlurstÃŒck
219  FROM ax_flurstueck     f 
220
221  -- 1. Buchung
222  JOIN ax_buchungsstelle      s1 ON f.istgebucht = s1.gml_id
223  LEFT JOIN alkis_wertearten  w1 ON cast(s1.buchungsart AS character varying)=w1.k AND w1.element='ax_buchungsstelle' AND w1.bezeichnung='buchungsart'
224  JOIN ax_buchungsblatt       b1 ON s1.istbestandteilvon = b1.gml_id
225  LEFT JOIN alkis_wertearten  a1 ON b1.blattart=a1.k AND a1.element='ax_buchungsblatt' AND a1.bezeichnung='blattart'
226
227  -- 2. Buchung
228  JOIN ax_buchungsstelle      s2 ON s1.gml_id = ANY(s2.an)
229  LEFT JOIN alkis_wertearten  w2 ON cast(s2.buchungsart AS character varying)=w2.k AND w2.element='ax_buchungsstelle' AND w2.bezeichnung='buchungsart'
230  JOIN ax_buchungsblatt       b2 ON s2.istbestandteilvon = b2.gml_id
231  LEFT JOIN alkis_wertearten  a2 ON b2.blattart=a2.k AND a2.element='ax_buchungsblatt' AND a2.bezeichnung='blattart'
232
233  -- 3. Buchung
234  JOIN ax_buchungsstelle      s3 ON s2.gml_id = ANY(s3.an)
235  LEFT JOIN alkis_wertearten  w3 ON cast(s3.buchungsart AS character varying)=w3.k AND w3.element='ax_buchungsstelle' AND w3.bezeichnung='buchungsart'
236  JOIN ax_buchungsblatt       b3 ON s3.istbestandteilvon = b3.gml_id
237  LEFT JOIN alkis_wertearten  a3 ON b3.blattart=a3.k AND a3.element='ax_buchungsblatt' AND a3.bezeichnung='blattart'
238
239 -- nur frische Sachen
240 WHERE f.endet  IS NULL
241   AND s1.endet IS NULL AND b1.endet IS NULL
242   AND s2.endet IS NULL AND b2.endet IS NULL
243   AND s3.endet IS NULL AND b3.endet IS NULL
244 LIMIT 20;
245-- AusfÃŒhrung Stadt ca. 4 Sek.
246
247COMMENT ON VIEW buchungsrechte_3text IS 'FÃŒr Buchungsarten mit 3 beteiligten Buchungsstellen die einzelnen Kennzeichen als beschreibenden Text auflisten.';
248
249
250
251CREATE OR REPLACE VIEW buchungsrechte_4text
252AS
253 SELECT
254    a4.v || ' (' || b4.blattart || ') ' || b4.buchungsblattnummermitbuchstabenerweiterung || ' (lfd. ' || s4.laufendenummer || ') hat ' || w4.v || ' (' || s4.buchungsart || ') an ' AS stufe4,
255    a3.v || ' (' || b3.blattart || ') ' || b3.buchungsblattnummermitbuchstabenerweiterung || ' (lfd. ' || s3.laufendenummer || ') hat ' || w3.v || ' (' || s3.buchungsart || ') an ' AS stufe3,
256    a2.v || ' (' || b2.blattart || ') ' || b2.buchungsblattnummermitbuchstabenerweiterung || ' (lfd. ' || s2.laufendenummer || ') hat ' || w2.v || ' (' || s2.buchungsart || ') an ' AS stufe2,
257    a1.v || ' (' || b1.blattart || ') ' || b1.buchungsblattnummermitbuchstabenerweiterung || ' (lfd. ' || s1.laufendenummer || ') hat ' || w1.v || ' (' || s1.buchungsart || ') mit Buchung ' AS stufe1,
258    'FlurstÃŒck ' || f.flurstueckskennzeichen || ' (gml_id=' || f.gml_id || ')' AS flurstueck
259
260  -- FlurstÃŒck
261  FROM ax_flurstueck     f 
262
263  -- 1. Buchung
264  JOIN ax_buchungsstelle      s1 ON f.istgebucht = s1.gml_id
265  LEFT JOIN alkis_wertearten  w1 ON cast(s1.buchungsart AS character varying)=w1.k AND w1.element='ax_buchungsstelle' AND w1.bezeichnung='buchungsart'
266  JOIN ax_buchungsblatt       b1 ON s1.istbestandteilvon = b1.gml_id
267  LEFT JOIN alkis_wertearten  a1 ON b1.blattart=a1.k AND a1.element='ax_buchungsblatt' AND a1.bezeichnung='blattart'
268
269  -- 2. Buchung
270  JOIN ax_buchungsstelle      s2 ON s1.gml_id = ANY(s2.an)
271  LEFT JOIN alkis_wertearten  w2 ON cast(s2.buchungsart AS character varying)=w2.k AND w2.element='ax_buchungsstelle' AND w2.bezeichnung='buchungsart'
272  JOIN ax_buchungsblatt       b2 ON s2.istbestandteilvon = b2.gml_id
273  LEFT JOIN alkis_wertearten  a2 ON b2.blattart=a2.k AND a2.element='ax_buchungsblatt' AND a2.bezeichnung='blattart'
274
275  -- 3. Buchung
276  JOIN ax_buchungsstelle      s3 ON s2.gml_id = ANY(s3.an)
277  LEFT JOIN alkis_wertearten  w3 ON cast(s3.buchungsart AS character varying)=w3.k AND w3.element='ax_buchungsstelle' AND w3.bezeichnung='buchungsart'
278  JOIN ax_buchungsblatt       b3 ON s3.istbestandteilvon = b3.gml_id
279  LEFT JOIN alkis_wertearten  a3 ON b3.blattart=a3.k AND a3.element='ax_buchungsblatt' AND a3.bezeichnung='blattart'
280
281  -- 4. Buchung
282  JOIN ax_buchungsstelle      s4 ON s3.gml_id = ANY(s4.an) 
283  LEFT JOIN alkis_wertearten  w4 ON cast(s4.buchungsart AS character varying)=w4.k AND w4.element='ax_buchungsstelle' AND w4.bezeichnung='buchungsart'
284  JOIN ax_buchungsblatt       b4 ON s4.istbestandteilvon = b4.gml_id
285  LEFT JOIN alkis_wertearten  a4 ON b4.blattart=a4.k AND a4.element='ax_buchungsblatt' AND a4.bezeichnung='blattart'
286
287 -- nur frische Sachen
288 WHERE f.endet  IS NULL
289   AND s1.endet IS NULL AND b1.endet IS NULL
290   AND s2.endet IS NULL AND b2.endet IS NULL
291   AND s3.endet IS NULL AND b3.endet IS NULL
292   AND s4.endet IS NULL AND b4.endet IS NULL
293 LIMIT 20;
294-- AusfÃŒhrung Stadt ca. 2 Minuten. Wieso so lange?
295
296COMMENT ON VIEW buchungsrechte_4text IS 'FÃŒr Buchungsarten mit 4 beteiligten Buchungsstellen die einzelnen Kennzeichen als beschreibenden Text auflisten.';
297
298-- Ende --
Note: See TracBrowser for help on using the repository browser.