Hallo sisNET Community,
wie beim GeoForum 2012 in Augsburg angesprochen wird hier nun eine Seite ins Leben gerufen die der sisNET Community Tipps & Tricks rund um das Thema "Qualitätssicherung der sisNET Daten mittels SQL Abfragen" bereitstellt.
Alle Mitglieder sind herzlich dazu aufgerufen sich hierbei zu beteiligen. Den Anfang werde ich mit den in Augsburg vorgestellten Abfragen machen...
Viele Grüße
Markus Tigiser
Zunächst ein paar Beispiele für einfache Abfragen von Sachdaten
Aufgabenstellung 1:
Ermitteln aller Schächte deren Schachtnummer nicht gefüllt (NULL) ist:
SELECT MSLINK, OBJEKT FROM N_F_SCH WHERE SCH_NR IS NULL;
Möchte man die Ergebnisse in die Selektionsliste nach sisNET übertragen so müssen die Werte in die Auswahltabelle des Users (in diesem Fall der User mit der Nummer 5) im User-Schema geschrieben werden:
INSERT INTO AUSWAHL5(MSLINK,OBJEKT) SELECT MSLINK, OBJEKT FROM DEMO_ADMIN.N_F_SCH WHERE SCH_NR IS NULL;
Aufgabenstellung 2:
Ermitteln aller Rohrleitungen deren Eigentümer ungleich fremd und deren Status offen ist:
SELECT MSLINK, OBJEKT FROM N_F_RLA WHERE LOWER(EIGENT)!='fremd' AND STA='offen';
Aufgabenstellung 3:
Ermitteln aller Rohrleitungen deren Eigentümer ungleich fremd und deren Verlegeart leer oder offen ist:
SELECT MSLINK, OBJEKT FROM N_F_RLA WHERE LOWER(EIGENT)!='fremd' AND (VERLART IS NULL OR VERLART='offen');
Soweit zu den Sachdatenabfragen, weiter geht es mit Abfragen zu den Beziehungen der Objekte
Aufgabenstellung 1:
Ermitteln aller Rohrleitungen ohne Beziehung zu Trassenmittellinien (Objekt ID 11001):
SELECT MSLINK, OBJEKT FROM N_F_RLA WHERE MSLINK NOT IN(SELECT MSLINK FROM N_F_RLA_BEZ WHERE bez_objekt IN(11001));
Aufgabenstellung 2:
Ermitteln aller Deckel ohne Beziehung zu einem Schacht (Objekt ID 13501):
SELECT MSLINK, OBJEKT FROM N_F_DEK WHERE UPPER(TYP)='DECKEL' AND MSLINK NOT IN(SELECT MSLINK FROM N_F_DEK_BEZ WHERE bez_objekt IN(13501));
Aufgabenstellung 3:
Ermitteln aller Trassenmittellinien mit mehr als 4 in Beziehungen stehenden Rohrleitungen (Objekt ID 11101):
SELECT N_F_LA_BEZ_BEST.OBJEKT, N_F_LA_BEZ_BEST.MSLINK FROM N_F_LA_BEZ_BEST GROUP BY N_F_LA_BEZ_BEST.OBJEKT, N_F_LA_BEZ_BEST.MSLINK, N_F_LA_BEZ_BEST.BEZ_OBJEKT HAVING COUNT (N_F_LA_BEZ_BEST.MSLINK)>4 AND N_F_LA_BEZ_BEST.BEZ_OBJEKT=11101 ORDER BY N_F_LA_BEZ_BEST.MSLINK;
Als nächstes möchte ich zwei räumliche Abfragen vorstellen
Aufgabenstellung 1 (räumliche Abfrage mit SQL):
Ermitteln aller Lagepunktpaare (Objekt ID 15001) innerhalb einer Distanz von 0,001m und beide mit Beziehung zur Rohrleitung:
select a.mslink as "A.MSLINK", b.mslink as "B.MSLINK", a.kox, b.kox FROM (select * from n_f_lp_best aa where aa.mslink in(select bb.bez_mslink from n_f_la_bez_best bb where bb.bez_objekt=15001)) A, (select * from n_f_lp_best aa where aa.mslink in(select bb.bez_mslink from n_f_la_bez_best bb where bb.bez_objekt=15001)) B where A.KOX IN(B.KOX,B.KOX+0.001,B.KOX-0.001) AND A.KOY IN(B.KOY,B.KOY+0.001,B.KOY-0.001) and a.mslink<>b.mslink order by a.mslink;
Aufgabenstellung 2 (räumliche Abfrage mit Spatial SQL, Voraussetzung dafür ist daß die Daten im Spatial Format abgelegt sind):
Ermitteln aller Netzflächen mit einer Größe > 100000:
SELECT GID, SDO_GEOM.SDO_AREA(SDO_GEOMETRY, 0.005) FROM N_F_NET_GEOM_BEST WHERE SDO_GEOM.SDO_AREA(SDO_GEOMETRY, 0.005) > 100000;