| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Oracle-SQL in einer Zeile ausgeben für Tooltips (2530 mal gelesen)
|
LarsB Mitglied
Beiträge: 446 Registriert: 13.05.2003 Windows 7 Prof. 64-Bit Tarox-Workstation mit Xeon 8 Core CPU mit 3.60 GHz 24 GB RAM NVIDIA Quadro 4000 AutoCAD Map 2019 MapEdit AutoCAD 2019
|
erstellt am: 22. Jul. 2014 10:30 <-- editieren / zitieren --> Unities abgeben:
Hallo Forum, ich versuche seit einiger Zeit die Ergebnisse einer SQL-Abfrage (ORACLE 11g) in eine Zeile zu quetschen. Hintergrund: Ich möchte die Baulastnummer als Tooltip anzeigen lassen. hier kann ich aber keine Mehrfachergebnisse anzeigen lassen. Ich hoffe nun, dass alle Ergebnisse angezeigt werden, wenn ich sie per SQL in einer Zeile ausgeben lasse. 1. Versuch (Baulasten der Objekte mit FID 503749): select listagg(BAULASTNR, ', ') within GROUP (order by BAULASTNR) FROM V_BAULASTEN WHERE FID = 503749 Das funktioniert leider nur so lange, bis GEOM mit dabei ist. GEOM kann nicht gruppiert werden. 2. Versuch:
SELECT FID, GEOM, SUBSTR(SYS_CONNECT_BY_PATH (BAULASTNR , ','), 2) csv FROM (SELECT FID, GEOM, BAULASTNR , ROW_NUMBER () OVER (ORDER BY BAULASTNR) rn, COUNT (*) OVER () cnt FROM V_BAULASTEN) WHERE FID = 503749 and rn = cnt START WITH rn = 1 CONNECT BY rn = PRIOR rn + 1; Ergebnis: ORA-01489: Das Ergebnis der Zeichenfolgenverkettung ist zu lang Ich vermute ein Problem mit der Where-Bedingung.
Hat jemand Vorschläge oder ganz andere Lösungswege? Vielen Dank. [Diese Nachricht wurde von LarsB am 28. Jul. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Moderator Verm.-Ing.
Beiträge: 1521 Registriert: 17.08.2005 AutoCAD Map aktuell, Designsuite VS6, VS.net
|
erstellt am: 25. Jul. 2014 15:18 <-- editieren / zitieren --> Unities abgeben: Nur für LarsB
Hallo Lars, listagg und WM_Concat sind wohl die richtigen Befehle. Ich verstehe allerdings nicht wie deine Tabelle aufgebaut ist. In der Regel habe ich eine Tabelle A mit der Geometrie und eine Tabelle (B) mit den Attributen die ich dann als Tooltip an A linearisieren will. Wilfried Stelberg ------------------ Warum lisp'eln wenn's auch anders geht. www.ib-stelberg.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Moderator Verm.-Ing.
Beiträge: 1521 Registriert: 17.08.2005 AutoCAD Map aktuell, Designsuite VS6, VS.net
|
erstellt am: 25. Jul. 2014 16:58 <-- editieren / zitieren --> Unities abgeben: Nur für LarsB
Hallo Lars, hier noch ein Beispiel:
Code: -- Tabellen anlegen create table eltern(fid number(10),name varchar2(50)); create table kinder(fid number(10),fid_Eltern number(10),name varchar2(50));
Code: --Werte einfügen insert into eltern values(1,'Mueller'); insert into Kinder values(1,1,'Mueller Kind 1'); insert into Kinder values(2,1,'Mueller Kind 2');insert into eltern values(2,'Maier'); insert into Kinder values(3,2,'Maier Kind 1'); insert into eltern values(3,'Krause'); insert into Kinder values(4,3,'Krause Kind 1'); insert into Kinder values(5,3,'Krause Kind 2'); insert into Kinder values(6,3,'Krause Kind 3'); insert into eltern values(4,'Ludwig'); commit;
Code: -- Abfrage mit WM_CONCAT select e.fid, e.name, case when Namen is null then '- Keine Kinder -' else K.Namen end as ListeKinder from Eltern e, (select fid_Eltern, wm_concat(name) as Namen from kinder group by fid_Eltern) K where e.fid=k.fid_Eltern(+) ;
Code: --Abfrage mit ListAgg select e.fid, e.name, case when Namen is null then '- Keine Kinder -' else K.Namen end as ListeKinder from Eltern e, (select fid_Eltern, listagg(name,',') within Group (order by Name) as Namen from kinder group by fid_Eltern) K where e.fid=k.fid_Eltern(+) ;
WM_Concat läuft auch bereits bei Oracle 10. ListAgg bietet aber die Möglichkeit ein beliebiges Trennzeichen zu setzen und die Liste einfacher zu sortieren. ListAgg ist aber eine Funktion der Enterprise Edition. Code: Ausgabe FID NAME LISTEKINDER --- ------- ----------------------------------------- 1 Mueller Mueller Kind 1,Mueller Kind 2 2 Maier Maier Kind 1 3 Krause Krause Kind 1,Krause Kind 2,Krause Kind 3 4 Ludwig - Keine Kinder - 4 rows selected.
Wilfried Stelberg ------------------ Warum lisp'eln wenn's auch anders geht. www.ib-stelberg.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
LarsB Mitglied
Beiträge: 446 Registriert: 13.05.2003 Windows 7 Prof. 64-Bit Tarox-Workstation mit Xeon 8 Core CPU mit 3.60 GHz 24 GB RAM NVIDIA Quadro 4000 AutoCAD Map 2019 MapEdit AutoCAD 2019
|
erstellt am: 28. Jul. 2014 08:14 <-- editieren / zitieren --> Unities abgeben:
Guten Morgen und Danke für die Antworten. Also listagg funktioniert bei mir mit Geometrie nicht, wie ich oben geschrieben habe. Die Enterprise Edition haben wir. WM_CONCAT teste ich gleich mal. Die Tabelle ist recht simpel aufgebaut. FID | BAULASTNR | OBJEKTNR | FLST | GEOM | Die Trennung zwischen Geometrie und Sachdaten haben wir auch in einem Projekt. Das erweist sich in der Praxis aber oft als unpraktisch, da immer die Brücke zwischen Geometrie und Sachdaten hergestellt werden muss. Gruß Lars Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Moderator Verm.-Ing.
Beiträge: 1521 Registriert: 17.08.2005 AutoCAD Map aktuell, Designsuite VS6, VS.net
|
erstellt am: 28. Jul. 2014 18:26 <-- editieren / zitieren --> Unities abgeben: Nur für LarsB
Hallo Lars, du kannst die gleiche Tabelle ja zweimal verwenden, einmal mit und einmal ohne Geometrie. Ich verstehe aber immer noch nicht was du nach welchen Kriterium zusammenfassen willst. Wilfried Stelberg ------------------ Warum lisp'eln wenn's auch anders geht. www.ib-stelberg.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Technischer Zeichner Sonderfahrzeugbau (m/w/d) | Bei Schmitz Feuerwehrtechnik GmbH verschmelzen Tradition und Innovation in der Sonderfahrzeugbranche. Seit 1934 fertigen wir Feuerwehrfahrzeuge, angefangen bei Kleinfahrzeugen bis hin zu Flugfeldlöschfahrzeugen. Mit unserem vielfältigen Kundenkreis, bestehend aus berufs- und freiwilligen Feuerwehren, Industrie, Flughäfen und öffentlichen Verwaltungen weltweit, blicken wir in eine Zukunft, in der die Rolle der Feuerwehren und Katastrophenschützer zunehmend an Bedeutung gewinnen wird.... | Anzeige ansehen | Technischer Zeichner, Bauzeichner |
|
LarsB Mitglied
Beiträge: 446 Registriert: 13.05.2003 Windows 7 Prof. 64-Bit Tarox-Workstation mit Xeon 8 Core CPU mit 3.60 GHz 24 GB RAM NVIDIA Quadro 4000 AutoCAD Map 2019 MapEdit AutoCAD 2019
|
erstellt am: 29. Jul. 2014 08:04 <-- editieren / zitieren --> Unities abgeben:
Hallo, um mir in MapEdit Tooltips anzeigen lassen zu können, muss ich per SQL die nötigen Daten auslesen. Zuerst eine ID hier also die FID, dann die Geometrie (GEOM) und dann die Daten, die angezeigt werden sollen. In diesem Fall die Baulasten. Gestern Abend ist es mir aber gelungen. Vielleicht nicht elegant aber es funktioniert: SELECT FID, SDO_AGGR_UNION(SDOAGGRTYPE(GEOM, 0.005)) as GEOM, listagg(BAULASTNR, ', ') within GROUP (order by BAULASTNR) AS BLNR FROM V_BAULASTEN Where FID = 503749 GROUP BY FID Gruß Lars Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|