source: trunk/import/norgis_alkis_pp/postcreate.d/7_views_buchungsketten.sql @ 412

Revision 412, 13.9 KB checked in by frank.jaeger, 5 years ago (diff)

Anpassung der ALKIS-Auskunft (PHP) an die Full-Schema-Version des ALKIS-Importers 3.0

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