Archiv des Intrexx Live! Forums

Hier sehen Sie die Foreneinträge aus dem Intrexx Live! Forum. Bis November 2016 war es das Forum für alle Fragen rund um die Software Intrexx von United Planet.
Seit November 2016 gibt es ein neues moderiertes Forum, das Intrexx Community Forum. Nutzen Sie bitte unbedingt dieses für aktuelle Fragen, Antworten und Informationen.

Wichtig: Dieses Forum dient als Archiv. Die Einträge beziehen sich oft auf ältere Versionen von Intrexx und entsprechen nicht mehr den aktuellen technischen Gegebenheiten.
Daher sollten alle Inhalte ausschließlich von Experten genutzt werden. Bei unsachgemäßer Anwendung kann es zu zeitaufwändigen Problemen oder Datenverlust kommen.
Übersicht > Intrexx Professional: Suggestions > Verwendung von SQL-Aggregatfunktionen in Filtern

Verwendung von SQL-Aggregatfunktionen in Filtern

Hallo UP,

es wäre wünschenswert, SQL-Funktionen wie SUM, MIN und MAX in Filtern verwenden zu können. Vor allen Dingen in Subqueries wäre das sehr sinnvoll, z.B. für Abfragen wie "der nächste freie Platz" oder "das Ende der Kette". Oder gibt es sowas möglicherweise schon (nur undokumentiert)? In Ansichtstabellen kann man sich ja manchmal noch mit der Sortierung und Beschränkung auf eine Tabellenzeile behelfen, aber in UPDATE-Datenbankaktionen geht das leider nicht. Gerade hier (in Prozessen) wäre das eine feine Sache:

Beispiel:
update TABELLE t set t.FELD1=?, t.FELD2=?, t.FELD3=? where t.INDEX = (select MAX(x.INDEX) from TABELLE x where x.ANDERESFILTERKRITERIUM=?)


aber auch bei Tabellenfiltern kann sowas nützlich sein, z.B.

select t.FELD1=?, t.FELD2=?, t.FELD3=? from TABELLE t where t.FKLID=? and t.INDEX = (select MIN(x.INDEX) from TABELLE x where x.ANDERESFILTERKRITERIUM=?


Machbar wäre sowas doch z.B. durch ein Filterkonstrukt wie dieses:


<filter guid="686...2AC">
<conc op="and">
<exp op="=" type="infix"> <!-- Man bemerke, dass hier "=" verwendet werden kann statt "in", weil bei solchen Funktionen garantiert nur ein Wert herauskommt -->
<arg content="BA02...97B" type="fieldguid"/>
<arg type="statement">
<select content="8EC5...438" type="tableguid">
<func type="min"> <!-- Hier wird eine Aggregatsfunktion angegeben -->
<field content="73A...FFC" type="fieldguid"/>
</func>
<conc op="and">
<exp op="=" type="infix">
<arg content="A44...AC" type="fieldguid"/>
<arg content="C13...29B0" type="currentvalue"/>
</exp>
</conc>
</select>
</arg>
</exp>
</conc>
</filter>



Das dürfte eigentlich kein allzugroßer Aufwand zum Implementieren sein.

Achja, was ich mir auch wünschen würde, wäre eine Möglichkeit in der verschachtelten Abfrage Felder der äußeren Abfrage referenzieren zu dürfen, wie z.B. in:

select t1.FELD1 from Tabelle1 t1 join Tabelle2 t2 on t2.LID=t1.REF_TAB2 where t2.L_INDEX = (select MAX(t2b.L_INDEX) from Tabelle2 t2b where t2b.FKLID=t1.FKLID)


Grüßle,
Roland
05.08.2013 09:45 von Raw
Hallo,

dem schließe ich mich so an.

Was ich persönlich noch gut fände, wäre wenn es die Möglichkeit gäbe das man im Filter die Verbindungs-Datenbank des statements fieldselect mit angeben könnte.

Ich habe z.B. eine Auswahlliste, welche auf einer Fremddatenquelle basiert, aber deren Primary Key auch in einer Intrexx-Tabelle gespeichert wird.
In der Ausswahlliste sollen nur die Datensätze angezeigt werden, deren PK in der Intrexx-Tabelle stehen


<filter guid="A7DE4EE4DBF51AEFA7A6D550AB3C59565C20AE75">
<exp op="" type="in">
<arg content="07B1185DBD1B153ADDB045886FA7D9D5F03F6D6A" type="fieldguid"/>
<arg type="statement">
<fieldselect content="FK_USER" dbtype="integer" table_content="B54EB884F48A501EA651962307A9ACA6D74C26CE" table_type="tableguid" type="name"/>
</arg>
</exp>
</filter>

Das dazugehörige Select-Statement sieht wie folgt aus:

"SELECT T0.INTREXX_KEY,T0.Fullname,T0.Name,T0.Vorname FROM dbo.vPortalMA T0
WHERE (T0.INTREXX_KEY IN ( SELECT TA1.FK_USER FROM
USER_UND_KATASTERMELDUNG_SPERRUNGEN TA1 ) ) ORDER BY T0.Name ASC,T0.Vorname
ASC".

Das Problem hierbei ist, dass die vPortalMA aus einer Fremddatenbank stammt und die Tabelle
USER_UND_KATASTERMELDUNG_SPERRUNGEN von der Intrexx-Systemdatenbank stammt.

Das diese Abfrage natürlich kein Ergebnis liefert ist dann klar.

Man könnte z.B. den fieldselect um die Angabe dbconnection="fremddatenbank" erweitern, welche per default auf die systemdb verweist.

Vielleicht gäbe es auch noch andere elegantere Lösungen!?

Danke für Euere Bemühungen

Grüße

Dirk Dittrich-Hasenzahl
10.12.2013 08:50 von ddh_wi
Zurück | Alles über Intrexx | Impressum | Datenschutzerklärung

Über United Planet
© 2019 United Planet GmbH
Schnewlinstraße 2
79098 Freiburg