![]() |
Datenbank: Firebird • Version: 2.5 • Zugriff über: Zeos
Abfrage mit dynamischen Spaltename
Hallo,
gibt es eine Möglichkeit den Spaltennamen in einem SQL-Statement, welches ich in eine Query über SQL.loadfromfile( einlesen möchte dynamisch zu definieren . Im konkreten Beispiel möchte das ich eine Auswertung über die letzte 6 Wochen starten und die KW in der Spaltenüberschrift sehen wollen.
Code:
SELECT
ARTIKEL.ARTIKEL_ID, SUM( case when ORDERS.DATUM between dateadd( week , -1 , current_date ) and dateadd( week , -0 , current_date ) then ORD_ARTIKEL.ARTIKEL_MENGE else 0 end ) AS Anz_1, SUM( case when ORDERS.DATUM between dateadd( week , -2 , current_date ) and dateadd( week , -1 , current_date ) then ORD_ARTIKEL.ARTIKEL_MENGE else 0 end ) AS Anz_2, SUM( case when ORDERS.DATUM between dateadd( week , -3 , current_date ) and dateadd( week , -2 , current_date ) then ORD_ARTIKEL.ARTIKEL_MENGE else 0 end ) AS Anz_3, SUM( case when ORDERS.DATUM between dateadd( week , -4 , current_date ) and dateadd( week , -3 , current_date ) then ORD_ARTIKEL.ARTIKEL_MENGE else 0 end ) AS Anz_4, SUM( case when ORDERS.DATUM between dateadd( week , -5 , current_date ) and dateadd( week , -4 , current_date ) then ORD_ARTIKEL.ARTIKEL_MENGE else 0 end ) AS Anz_5, SUM( case when ORDERS.DATUM between dateadd( week , -6 , current_date ) and dateadd( week , -5 , current_date ) then ORD_ARTIKEL.ARTIKEL_MENGE else 0 end ) AS Anz_6, FROM ORDERS INNER JOIN ARTIKEL ON ORDERS.ARTIKEL_ID = ARTIKEL.ARTIKEL_ID WHERE ORDERS.Datum BETWEEN dateadd(week,-6,current_date)and dateadd(week,-1,current_date) GROUP BY ARTIKEL.ARTIKEL_ID, |
AW: Abfrage mit dynamischen Spaltename
Ja, könnte man machen ... ist aber nicht ratsam ...
Besser wäre es doch, die Anzeige zu modifizieren. Dein DBGrid braucht doch lediglich ein
Delphi-Quellcode:
(welches ist dem völlig egal). Zur Not kannst du dem sogar ein
TDataSet
Delphi-Quellcode:
oder irgendein
TClientDataSet
Delphi-Quellcode:
unterjubeln.
TMemDataSet
Und in diesem DataSet kannst du dann die Spalten definieren und auf
Delphi-Quellcode:
setzen oder eben auch
Visible
![]() |
AW: Abfrage mit dynamischen Spaltename
Hallo,
vom Grunde her verstanden, mach ich auch schon in einigen Fällen. Hintergrund der Dynaimisierung ist, das ich über einen separaten SQL-Bulder individuelle Auswertungen erstellen möchte, welche nicht hart im Code verankert sind. Diese möchte ich dann über einen Screen im Programm abrufen. Dies können z.B. individuelle Statistikauswertungen sein. Aus diesem Grund wäre es ideal wenn ich den Spaltennamen als AS xxx dynamisch/über variable definieren kann. Obiges war nur ein Beispiel. Vielleicht geht dies, wie in Excel irgendwie mit PIVOT?? Damit habe ich bisher im SQL noch keine Erfahrung. |
AW: Abfrage mit dynamischen Spaltename
Wenn Du dynamisch SQL Statements erzeugst, hast Du doch die freie Wahl beim Feldnamen. Das bedeutet in Deinem Fall natürlich, dass innerhalb der Generierung des Statements die Werte für die Feldnamen abgefragt werden müssen.
Tatsächlich kannst Du in eingen RDBMS mit Pivotqueries arbeiten, die sind bezüglich der darzustellenden Pivotspalten aber auch nicht unbedingt dynamisch, sondern benötigen meist eine Angabe der Pivotspalten. In Firebird gibt es aber soweit ich weiß keine Pivotqueries. Vielleicht benötigst Du einfach eine dynamische Feldnamenverwaltung, die Du zur Darstellung Deiner Abfrageergebnisse einsetzt? Also ein Mapping von Abfragen und deren originärer Feldnamen auf die gewünschten Displaywerte? |
AW: Abfrage mit dynamischen Spaltename
Hallo,
danke, ist anscheinend nicht einfach in der SQL-Abfrage möglich ich werde es jetzt so machen, dass ich nach Abfrage, die Spaltnnamen checke und austausche. Vom Grunde her werden es Zeitangaben wie KW, Monat sein, welche ich nachbilde. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz