Index: trunk/import/sichten.sql
===================================================================
--- trunk/import/sichten.sql	(revision 298)
+++ trunk/import/sichten.sql	(revision 301)
@@ -8,5 +8,5 @@
 
 --  Dieses SQL braucht nur bei Bedarf in einer PostNAS-DB verarbeitet werden.
---  Es werden zusÃ€tzliche Views einegerichtet, die nur bei Fehlersuche und Analys (vom Entwickler) benÃ¶tigt werden.
+--  Es werden zusÃ€tzliche Views eingerichtet, die nur bei Fehlersuche und Analyse (vom Entwickler) benÃ¶tigt werden.
 
 --  PostNAS 0.7
@@ -23,4 +23,5 @@
 --  2013-10-23 Fehlersuche GebÃ€ude-Hausnummer-Relation
 --  2013-11-26 Neue Views (doppelverbindung)
+--  2014-01-17 View "exp_csv" fÃŒr den Export von CSV-Daten aus der Auskunft mit Modul alkisexport.php.
 
 
@@ -66,9 +67,115 @@
  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.';
 
--- Ende "Bausteine"
-
-
 -- Test-Ausgabe: Ein paar FÃ€lle mit "Recht an"
 --   SELECT * FROM doppelverbindung WHERE ba_dien > 0 LIMIT 20;
+
+-- Ende "Bausteine"
+
+
+
+-- Generelle Export-Struktur FlurstÃŒck - Buchung - Grundbuch - Person
+-- ------------------------------------------------------------------
+-- Verwendet den gespeicherten View "doppelverbindung".
+-- Wird benÃ¶tigt im Auskunft-Modul "alkisexport.php":
+-- Je nach aufrufendem Modul wird der Filter (WHERE) an anderer Stelle gesetzt (gml_id von FS, GB oder Pers.)
+
+-- Problem / Konflikt:
+-- Es kann nur eine lineare Struktur aus Spalten und Zeilen exportiert werden. 
+-- Wenn nicht nur die Daten des Ausgangs-Objektes exportiert werden, sondern auch verbundene Tabellen in 
+-- einer 1:N-Struktur, dann verdoppeln sich Zeileninhalte und es werden redundante Daten erzeugt. 
+-- Diese Redundanzen mÃŒssen vom dem Programm gefiltert werden, das die Daten ÃŒber eine Schnittstelle einliest.
+
+-- Anwendungs-Beispiel: Abrechnung von AnliegerbeitrÃ€gen.
+
+--           DROP VIEW exp_csv;
+CREATE OR REPLACE VIEW exp_csv
+AS
+ SELECT
+  -- ** FlurstÃŒck
+     f.gml_id AS fsgml,                                   -- mÃ¶glicher Filter FlurstÃŒcks-GML-ID
+     f.flurstueckskennzeichen             AS fs_kennz,
+     f.gemarkungsnummer,                                  -- Teile des FS-Kennz. noch mal einzeln
+     f.flurnummer, f.zaehler, f.nenner, 
+     f.amtlicheflaeche                    AS fs_flae,
+
+   -- * Adressen des FS -- Nein, diese werden im Export-Modul ermitteln und nachtragen
+ --  k.bezeichnung                          AS strasse,   -- StraÃennamen
+ --  split_part(l.hausnummer,' ',1)         AS hausnr,    -- Nummer
+ --  upper(split_part(l.hausnummer,' ',2))  AS hausnr_zs, -- Zusatz in GroÃschreibung
+
+  -- ** Grundbuch
+     gb.gml_id                            AS gbgml,       -- mÃ¶glicher Filter Grundbuch-GML-ID
+     gb.bezirk                            AS gb_bezirk,
+     gb.buchungsblattnummermitbuchstabenerweiterung AS gb_blatt,
+
+ -- ** Buchung
+     s.laufendenummer                     AS bu_lfd,
+   -- s.zaehler, s.nenner,                                -- Anteil des GB am FS
+     '=' || s.zaehler|| '/' || s.nenner   AS bu_ant,      -- als Excel-Formel  (nur bei Wohnungsgrundbuch JOIN ÃŒber 'Recht an')
+   --s.buchungsart,                                       -- verschlÃŒsselt
+     b.bezeichner                         AS bu_art,      -- entschlÃŒsselt
+
+   -- Felder aus der Subquery "Namens-Zweig"
+     nz.nam_lfd, nz.nam_ant, nz.nam_bes,                  -- nn.*
+     nz.psgml,                                            -- mÃ¶glicher Filter Personen-GML-ID
+     nz.nachnameoderfirma, nz.vorname, nz.geburtsdatum    -- p.*
+
+  FROM ax_flurstueck    f               -- FlurstÃŒck
+  JOIN doppelverbindung d               -- beide FÃ€lle ÃŒber Union-View: direkt und ÃŒber Recht von BS an BS
+    ON d.fsgml = f.gml_id 
+
+  JOIN ax_buchungsstelle s              -- Buchungs-Stelle
+    ON d.bsgml = s.gml_id 
+  JOIN ax_buchungsstelle_buchungsart b  -- EnstschlÃŒsselung der Buchungsart
+    ON s.buchungsart = b.wert 
+
+--  JOIN alkis_beziehungen v2             -- ax_flurstueck  >weistAuf>  AX_LagebezeichnungMitHausnummer
+--    ON v2.beziehung_von = f.gml_id AND v2.beziehungsart = 'weistAuf'
+--  JOIN ax_lagebezeichnungmithausnummer l
+--    ON v2.beziehung_zu = l.gml_id
+--  JOIN ax_lagebezeichnungkatalogeintrag k 
+--   ON l.kreis = k.kreis AND l.gemeinde = k.gemeinde AND l.lage = k.lage 
+
+  JOIN alkis_beziehungen v3              -- Grundbuch (zur Buchungs-Stelle)
+    ON s.gml_id = v3.beziehung_von  AND v3.beziehungsart = 'istBestandteilVon'  -- Buchung  --> Blatt
+  JOIN ax_buchungsblatt  gb 
+    ON v3.beziehung_zu = gb.gml_id 
+
+  LEFT JOIN -- LEFT: fiktives Blatt hat keine Namensnummern, dieser "Zweig" kann leer bleiben.
+  ( SELECT
+    -- Namensnummer
+     v4.beziehung_zu AS v4gml,
+     nn.laufendenummernachdin1421         AS nam_lfd, 
+     '=' || nn.zaehler|| '/' || nn.nenner AS nam_ant,         -- als Excel-Formel
+     nn.beschriebderrechtsgemeinschaft    AS nam_bes,
+
+     -- Person (zur Namensnummer)
+     p.gml_id                            AS psgml,            -- mÃ¶glicher Filter
+     p.nachnameoderfirma,                                     -- Familienname
+     p.vorname,                                               -- Vorname
+     p.geburtsdatum
+
+     -- Adresse des EigentÃŒmers  - Nein
+
+   FROM alkis_beziehungen v4         -- Namensnummer (zum GB-Blatt) 
+   JOIN ax_namensnummer nn 
+     ON v4.beziehung_von = nn.gml_id 
+   JOIN alkis_beziehungen v5         -- Person (zur Namensnummer)
+     ON v5.beziehung_von = nn.gml_id  AND v5.beziehungsart = 'benennt'  -- NamNum   --> Person
+   JOIN ax_person p
+     ON v5.beziehung_zu = p.gml_id
+   WHERE v4.beziehungsart = 'istBestandteilVon'  -- Blatt  --> NamNum
+  ) AS nz   -- Namens-Zweig
+   ON nz.v4gml = gb.gml_id      -- LEFT JOIN: Namenzweig an Grundbuch anbinden
+
+  ORDER BY f.flurstueckskennzeichen, gb.bezirk, gb.buchungsblattnummermitbuchstabenerweiterung, nz.nam_lfd ;
+
+COMMENT ON VIEW exp_csv 
+ 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.';
+
+-- GRANT SELECT ON TABLE exp_csv TO mb27;       -- User fÃŒr Auskunfts-Programme
+-- GRANT SELECT ON TABLE exp_csv TO alkisbuch;  -- User fÃŒr Auskunfts-Programme RLP-Demo
+
+
 
 -- Welche Karten-Typen ?
@@ -568,3 +675,23 @@
 
 
+-- Probleme mit der Trigger-Function "update_fields_beziehungen()"
+-- Manchmal kann zu einer gml_id in "alkis_beziehungen" die zustÃ€ndige Tabelle nicht gefunden werden.
+-- Nach Ãnderung der Trigger-Function am 10.12.2013 wird die Beziehung trotzdem eingetragen,
+-- nur die Felder "von_typename" und "beginnt" bleiben leer.
+
+-- Diese FÃ€lle anzeigen:
+CREATE OR REPLACE VIEW beziehungsproblem_faelle
+AS
+  SELECT *
+    FROM alkis_beziehungen
+   WHERE beginnt IS NULL;
+
+-- Wie viele sind das?
+CREATE OR REPLACE VIEW beziehungsproblem_zaehler
+AS
+  SELECT count(ogc_fid) AS anzahl
+    FROM alkis_beziehungen
+   WHERE beginnt IS NULL;
+
+
 -- END --
