AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Abfrage mit dynamischen Spaltename

Abfrage mit dynamischen Spaltename

Ein Thema von waldforest · begonnen am 13. Jul 2015 · letzter Beitrag vom 14. Jul 2015
Antwort Antwort
waldforest

Registriert seit: 8. Mai 2005
366 Beiträge
 
Delphi XE3 Enterprise
 
#1

Abfrage mit dynamischen Spaltename

  Alt 13. Jul 2015, 12:29
Datenbank: Firebird • Version: 2.5 • Zugriff über: Zeos
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,
mfg wf
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Abfrage mit dynamischen Spaltename

  Alt 13. Jul 2015, 13:00
Ja, könnte man machen ... ist aber nicht ratsam ...

Besser wäre es doch, die Anzeige zu modifizieren. Dein DBGrid braucht doch lediglich ein TDataSet (welches ist dem völlig egal). Zur Not kannst du dem sogar ein TClientDataSet oder irgendein TMemDataSet unterjubeln.

Und in diesem DataSet kannst du dann die Spalten definieren und auf Visible setzen oder eben auch Delphi-Referenz durchsuchenData.DB.TField.DisplayLabel anpassen.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
waldforest

Registriert seit: 8. Mai 2005
366 Beiträge
 
Delphi XE3 Enterprise
 
#3

AW: Abfrage mit dynamischen Spaltename

  Alt 13. Jul 2015, 19:17
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.
mfg wf
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#4

AW: Abfrage mit dynamischen Spaltename

  Alt 14. Jul 2015, 08:16
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?
Gruß, Jo
  Mit Zitat antworten Zitat
waldforest

Registriert seit: 8. Mai 2005
366 Beiträge
 
Delphi XE3 Enterprise
 
#5

AW: Abfrage mit dynamischen Spaltename

  Alt 14. Jul 2015, 11:37
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.
mfg wf
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:53 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz