![]() |
Datenbank: SQLite • Version: 3.x • Zugriff über: ----
Tabelle um Spalte erweitern und mit berechneten Werten füllen
Hallo zusammen,
ich habe zwei Tabellen, die in Abhänigkeit sind in einer SQLite3 Datenbank. Tabelle 1:
Tabelle 2:
In Tabelle 1 soll jetzt eine Spalte 4 hinzugefügt werden und dann möchte ich mit einem oder mehreren SQL-Befehl(en) einen Wert für die Spalte 4 errechnen. Beispiel für Wert 1 aus Tabelle 1 : Zeile 1 --> 1500 - 310 = 1190 Zeile 2 --> 1190 - 235 = 955 Zeile 3 --> 955 - 310 = 645 Die ausgerechneten Werte sollen dann jeweils in Spalte 4 der Tabelle 1 eingetragen werden. Das soll natürlich auch für Wert 2 und 3 gemacht werden. Ist dieses mit SQL-Befehlen möglich oder muß ich das ganze im Quelltext der Anwendung programmieren ? |
AW: Tabelle um Spalte erweitern und mit berechneten Werten füllen
Du kannst Spalten aus anderen Tabellen via JOIN oder als Sub-SELECT aufnehmen,
oder du benutzt ein CalcField und baust es in das DataSet ein.
SQL-Code:
SELECT A1, A2, (B1 - A1) AS Bx
FROM A JOIN B ON ... SELECT A1, A2, (SELECT B1 - A1 FROM B WHERE ...) AS Bx FROM A |
AW: Tabelle um Spalte erweitern und mit berechneten Werten füllen
Das sind doch nur ganz normale Select-Anweisungen. Mein Ergebnis nach dem/den SQL-Befehl(en) soll so aussehen :
Stelle ich die Frage anders. Kann ich einen INSERT INTO Befehl so aufbauen, dass er mir die Spalte 4 so aufbaut, wie in der Tabelle ? Wenn ja, wie muss das gemacht werden ? |
AW: Tabelle um Spalte erweitern und mit berechneten Werten füllen
Sollte durch Update gehen
SQL-Code:
update tabelle1 t1
set spalte4 = (select spalte2 from tabelle2 t2 where t2.spalte1 = t1.spalte) - t1.spalte3; |
AW: Tabelle um Spalte erweitern und mit berechneten Werten füllen
Hallo Markus,
ich habe Dein Update-Befehl ausprobiert. Leider bringt er nicht das gewünschte Ergebnis. Der Wert aus Tabelle 2 (Beispiel: 1500) soll nur bei der ersten Subtrahierung genommen werden. Beim zweiten Mal soll der Wert genommen werden, der durch das Update in Spalte 4 der ersten Tabelle eingefügt wurde. |
AW: Tabelle um Spalte erweitern und mit berechneten Werten füllen
Zitat:
Code:
update tabelle1 t1
set t1.spalte4 = (select t2.spalte2 from tabelle2 t2 where t2.spalte1 = t1.spalte2) - (select sum(t3.spalte3) from tabelle1 t3 where t3.spalte2 = t1.spalte2 and t3.spalte1 <= t1.spalte1); |
AW: Tabelle um Spalte erweitern und mit berechneten Werten füllen
Also ich glaube nicht, dass das so ohne weiteres geht (mit sqLite)
1. Die Anforderung benötigt im Prinzip Window Functions, was sqLite nicht besitzt (gibt glaub ich ein Mod, das etwas davon umsetzt) 2. Man bräuchte zum Verzicht auf die Window Fuctions noch genauere Angaben zu den Werten (Sortierung, Anzahl) Also ist das was man sieht, aufsteigend, lückenlos usw. garantiert oder "Zufall" 3. Ich frage mich nach dem Sinn. Du baust im Grunde gezielt eine funktionale Beziehung zwischen Daten ein. Das ist Denormalisierung, das will man nicht. Außer aus Performancegründen vielleicht, dann muss man es aber absichern oder regulieren, dass die Werte beliebig neu berechnet werden können oder oder |
AW: Tabelle um Spalte erweitern und mit berechneten Werten füllen
Hallo,
ich mag mich täuschen, aber ich würde sagen, dies ist mit einem einzigen deskriptiven SQL-Statement nicht möglich. Dass man das Ergebnis der einen Zeile, als Zwischenergebnis speichert und mit diesem Ergebnis dann in der nächsten Ergebniszeile weiterrechnet, ist meines Wissens nicht SQL-konform. Meine letzte SQL-Schulung ist zwar schon ein paar Jahre (Jahrzehnte) her, aber ich würde sagen nein. Mit Datenbankprogrammierung bzw. Delphiprogrammierung sollte das Problem aber einfach zu lösen sein. Falls ich mich geirrt habe, würde ich mich freuen, wenn mich jemand korrigiert (Man lernt nie aus). mfg Frank |
AW: Tabelle um Spalte erweitern und mit berechneten Werten füllen
kann SQLLite StoredProcedure? Dann mach das damit.
oder ein Denkanstoß... Zitat:
ist das gleiche wie...., damit brauchst du keinen Zwischenspeicher für das Ergebnis der vorausgegangenen Zeile...
Code:
Zeile 1 --> 1500 - 310 = 1190
Zeile 2 --> 1500 - 310 - 235 = 955 Zeile 3 --> 1500 - 310 - 235 - 310 = 645 |
AW: Tabelle um Spalte erweitern und mit berechneten Werten füllen
Oder eine View erstellen & damit weiter arbeiten ?
SQL-Code:
SELECT t1.Spalte1, t1.Spalte2, t1.Spalte3, t2.Spalte2 AS Wert, (t2.Spalte2 - t1.Spalte3) AS Rest
FROM Tabelle1 t1 LEFT JOIN Tabelle2 t2 ON t1.Spalte2 = t2.Spalte1 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:15 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