Summe einer Abfrage in eine Tabellenspalte eintragen

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

Wolfgang M
*
Beiträge: 15
Registriert: Di, 16.03.2010 16:49

Summe einer Abfrage in eine Tabellenspalte eintragen

Beitrag von Wolfgang M »

Ich möchte folgenden Select in eine Tabelle eintragen. Gibt es dafür einen SQL befehl ?
SELECT "Namen"."ID", SUM( "Tage1"."01" ), SUM( "Tage1"."02" ), SUM( "Tage1"."03" ), SUM( "Tage1"."04" ), SUM( "Tage1"."05" ), SUM( "Tage1"."06" ), SUM( "Tage1"."07" ), SUM( "Tage1"."08" ), SUM( "Tage1"."09" ), SUM( "Tage1"."10" ), SUM( "Tage1"."11" ) FROM "Tage1" AS "Tage1", "Namen" AS "Namen" WHERE "Tage1"."ID" = "Namen"."ID" GROUP BY "Namen"."ID"
Ich addiere über eine Abfrage von der Tabelle Tage1 alle Tage einer ID und das mit 10Spalten (Spalte 01, 02, 03 usw.).
Jetzt möchte ich das Ergebnis in der Tabelle Namen in die Spalte bis3 Tage übertragen wenn die Summe der Abfrage kleiner ist wie 4 sollte die Summe jedoch größer sein wie 3 dann sollte das Ergebnis in der Tabelle Namen in diee Spalte ab3 Tage übertragen werden.
Die Tabellen Namen und Tage1 habe ich über die ID verknüpft.
Barlee
******
Beiträge: 767
Registriert: Sa, 17.12.2005 12:27

Re: Summe einer Abfrage in eine Tabellenspalte eintragen

Beitrag von Barlee »

Hallo Wolfgang,

ich glaube, hier musst Du nochmal weiter ausholen.
Stelle am besten mal ein Beispiel zusammen, das die Ursprungstabelle und das erwartete Ergebnis in der Tabelle "Namen" zeigt.
Was meinst Du mit
Ich möchte folgenden Select in eine Tabelle eintragen.
Möchtest Du eine Tabelle abfragen oder das Ergebnis einer Abfrage in eine Tabelle schreiben (über INSERT)?
Gruß Barlee
Wolfgang M
*
Beiträge: 15
Registriert: Di, 16.03.2010 16:49

Re: Summe einer Abfrage in eine Tabellenspalte eintragen

Beitrag von Wolfgang M »

Hallo Barlee,
ich möchte das Ergebnis einer Abfrage nochmals selektieren in drei verschiedene kategorien bis 3 ; von 4 bis 43 und ab 44 Tage.
Dieser Select sollte dann über Insert in eine Tabelle eingetragen werden.
Wenn es helfen würde stelle ich gerne die Datenbank ins Forum.
Gruß Wolfgang
Wolfgang M
*
Beiträge: 15
Registriert: Di, 16.03.2010 16:49

Re: Summe einer Abfrage in eine Tabellenspalte eintragen

Beitrag von Wolfgang M »

Hallo Barlee
im Anhang ein Screenshot.
Dateianhänge
Screenshot.png
Screenshot.png (126.7 KiB) 2149 mal betrachtet
Barlee
******
Beiträge: 767
Registriert: Sa, 17.12.2005 12:27

Re: Summe einer Abfrage in eine Tabellenspalte eintragen

Beitrag von Barlee »

Hallo Wolfgang,

es gibt immer noch einige Unbekannte.
Bezogen auf Deinen Bildschirmausdruck folgendes Szenario.

SUM(tage1.01)
2
10
45

SUM(tage1.02)
2
10
45

SUM(tage1.03)
2
10
45

ergibt:
bis3 = 6
3_42 = 30
ab43 = 135

Willst Du ein solches aufsummiertes Ergebnis?
Gruß Barlee
Wolfgang M
*
Beiträge: 15
Registriert: Di, 16.03.2010 16:49

Re: Summe einer Abfrage in eine Tabellenspalte eintragen

Beitrag von Wolfgang M »

Hallo Barlee,
danke für Deine Anwort aber das ist nicht mein Vorhaben.
Bezogen auf dem Bildschirmausdruck meine ich,
wenn in der Abfrage SUM(tage1.02) das Ergebnis 2 ist dann soll die 2 in die Tabellenspalte bis 3Tage.
Ist in der Abfrage SUM(tage1.02) das Ergebnis 10 dann soll die 10 in der Tabellenspalte 3_42 eingetragen werden.
Sollte jedoch das Ergebnis der Abfrage SUM(tage1.02) 45 sein dann soll die 45 in die Tabellenspalte ab 43.
Die anderen Spalten der Abfrage lassen wir mal weg ( SUM(tage1.01) ; SUM(tage1.03) usw. )
Das Ergebnis der Abfrage SUM(tage1.02) wird demnach in drei verschiedene Kategorien aufgeteilt >3 , von 4 - 43 und <44 Tage.
Gruß Wolfgang
Barlee
******
Beiträge: 767
Registriert: Sa, 17.12.2005 12:27

Re: Summe einer Abfrage in eine Tabellenspalte eintragen

Beitrag von Barlee »

Hallo Wolfgang,
das hatte ich insofern schon richtig verstanden. Dein Bildschirmbeispiel hat das gut dargestellt.
Allerdings bezieht sich Dein Beispiel nur auf eine gefüllte Spalte mit den Ergebnissen von SUM(tage1.02).
Hier ist die Zuordnung eindeutig.
Was soll aber passieren, wenn mehrere Spalten befüllt sind?
Du hast eine Ausgangstabelle mit zehn Spalten, die Summenwerte enthalten. Jedes dieser Spaltenwerte kann die Bedingung "bis3", "3_42" oder "ab43" erfüllen. Du hast aber nur 3 Zielspalten in der Tabelle "Namen". Wie verfährst Du mit Werten in der gleichen Zeile, die den gleichen Bedingungen entsprechen?
Schau Dir zur Veranschaulichung folgende Tabelle an. Sie hat exemplarisch nur 3 statt der in Deiner Tabelle enthaltenen 10 Spalten.
Quelltabelle.png
Quelltabelle.png (3.3 KiB) 2113 mal betrachtet
In der ersten Zeile siehst Du, dass Spalten "01" und "02" mit den Werten 1 und 2 der Bedingung "bis3" entsprechen. Die Zieltabelle, die Du mittels INSERT befüllen möchtest, bietet aber nur eine Spalte für die Bedingung "bis3" an. Sollen also die 1 und 2 zusammengezogen werden und eine 3 in die Tabelle geschrieben werden oder sollen womöglich separate Zeilen für jeden Wert eingefügt werden? Letzteres wird durch die ID als Primärschlüssel jedoch verhindert, da diese eindeutig bleiben muss.
Sende am besten zu beigefügter Beispieltabelle die gewünschte Ergebnistabelle zu. Dann kann man daraus eine Lösung ableiten.

Gruß Barlee
Wolfgang M
*
Beiträge: 15
Registriert: Di, 16.03.2010 16:49

Re: Summe einer Abfrage in eine Tabellenspalte eintragen

Beitrag von Wolfgang M »

Hallo Barlee,
die Tabelle Namen wird dann noch ergänzt für die Abfrage SUM(tage1.01) und die Abfrage SUM(tage1.02) usw s. Bild.
Dateianhänge
1.png
1.png (105.92 KiB) 2086 mal betrachtet
Wolfgang M
*
Beiträge: 15
Registriert: Di, 16.03.2010 16:49

Re: Summe einer Abfrage in eine Tabellenspalte eintragen

Beitrag von Wolfgang M »

Ändert sich die Abfrage s. Bild.

Danke und Gruß Wolfgang
Dateianhänge
2.png
2.png (119.92 KiB) 2082 mal betrachtet
Barlee
******
Beiträge: 767
Registriert: Sa, 17.12.2005 12:27

Re: Summe einer Abfrage in eine Tabellenspalte eintragen

Beitrag von Barlee »

Hallo Wolfgang,

das ist gar nicht so schwer.
Da Du das Ergebnis der Abfrage anschließend in eine andere Tabelle mittels INSERT überführen möchtest, sollte sich das Abfrageergebnis an der Struktur der "Zieltabelle" orientieren.
Folgendes Beispiel. Ausgangstabelle (Tab_Summe genannt):
Quelltabelle.png
Quelltabelle.png (3.31 KiB) 2074 mal betrachtet
Diese wird jetzt abgefragt.

Code: Alles auswählen

SELECT "Namen_ID",
SUM("1_bis3") "1_bis3",
SUM("1_3_42") "1_3_42",
SUM("1_ab43") "1_ab43",

SUM("2_bis3") "2_bis3",
SUM("2_3_42") "2_3_42",
SUM("2_ab43") "2_ab43",

SUM("3_bis3") "3_bis3",
SUM("3_3_42") "3_3_42",
SUM("3_ab43") "3_ab43" 
FROM 
(
SELECT "Namen_ID",
CASE WHEN "01" BETWEEN 0 AND 2 THEN "01" ELSE 0 END AS "1_bis3",
CASE WHEN "01" BETWEEN 3 AND 42 THEN "01" ELSE 0 END AS "1_3_42",
CASE WHEN "01" >42 THEN "01" ELSE 0 END AS "1_ab43",

CASE WHEN "02" BETWEEN 0 AND 2 THEN "02" ELSE 0 END AS "2_bis3",
CASE WHEN "02" BETWEEN 3 AND 42 THEN "02" ELSE 0 END AS "2_3_42",
CASE WHEN "02" >42 THEN "02" ELSE 0 END AS "2_ab43",

CASE WHEN "03" BETWEEN 0 AND 2 THEN "03" ELSE 0 END AS "3_bis3",
CASE WHEN "03" BETWEEN 3 AND 42 THEN "03" ELSE 0 END AS "3_3_42",
CASE WHEN "03" >42 THEN "03" ELSE 0 END AS "3_ab43"
FROM "Tab_Summe"
)
GROUP BY "Namen_ID"
mit dem Ergebnis:
Zieltabelle.png
Zieltabelle.png (6.07 KiB) 2074 mal betrachtet
Du siehst, dass das Abfrageergebnis schon der Tabellenstruktur von "Namen" entspricht. (ich gehe hier von einem vereinfachten Beispiel aus, Du besitzt mehr Spalten in der Tabelle "Namen", die Du natürlich berücksichtigen musst)
Stellst Du unter Extras/SQL obigem Code noch ein

Code: Alles auswählen

INSERT INTO "Namen"
voran, dann wird das Ergebnis in die Tabelle "Namen" geschrieben.

Allerdings frage ich mich, ob letzter Schritt wirklich notwendig ist. Du kennst die Möglichkeiten von Ansichten/Views?
Ein rechter Mausklick auf eine gespeicherte Abfrage bietet Dir "als Ansicht erstellen" an. Das bedeutet. dass das Abfrageergebnis in einen View umgewandelt wird und danach unter Tabellen zur Verfügung steht. Aus meiner Sicht könntest Du darauf zurückgreifen, anstatt ein INSERT durchzuführen.

Wolfgang, versuche am besten, mein Beispiel nachzuvollziehen. Das lässt sich problemlos auf 10 Spalten erweitern. Das Grundprinzip bleibt gleich. Wenn es Fragen gibt, melde Dich.
Wichtig: zur Ausführung des SQL müss "SQL direkt ausführen" aktiviert sein und Tabellennamen, Spaltenbezeichner usw. in Anführungsstrichen stehen!
Viel Erfolg!
Gruß Barlee
Wolfgang M
*
Beiträge: 15
Registriert: Di, 16.03.2010 16:49

Re: Summe einer Abfrage in eine Tabellenspalte eintragen

Beitrag von Wolfgang M »

Danke Barlee,
ich werde es demnächst testen und gebe Dir dann bescheid ob es funktioniert.
Gruß Wolfgang
Wolfgang M
*
Beiträge: 15
Registriert: Di, 16.03.2010 16:49

Re: Summe einer Abfrage in eine Tabellenspalte eintragen

Beitrag von Wolfgang M »

Hallo Barlle,
jetzt habe ich das Beispiel getestet und muß feststellen das ich noch sehr viel lernen muß.
Das Ergebnis ist noch nicht das was ich brauche schau Dir bitte meine Quell und Zieltabelle nochmal an.
Das Beispiel von Dir addiert die Zeilen einer ID nach dem Kriterium bis3 , 4_42 und ab 43. der Ouelltabelle Spalte01 ,02, 03.
Ich benötige die Summe aller Zeilen einer ID der Quelltabelle Spalte 01 ,02, 03 und dann soll nach dem Kriterium bis3 , 4_42 und ab 43 abgefragt weden.
Die Möglichkeiten von Ansichten/Views hab ich getestet und ich bin begeistert. Aber ich hätte gerne den Eintag in der Tabelle, weil ich diese Tabelle dann nochmals Abfrage nach anderen Kriterien sortieren möchte. Mein Test ist gescheitert Fehlermeldung s. Bild INSERT.
Für Deine Hilfe wäre ich Dir sehr dankbar, alleine schaffe ich es so schnell nicht.
Noch eine Frage hätte ich? Wie bekommst Du ein Bild ins Forum ohne Dateianhang: Button Img und dann ??? welche http wenn ich keine eigene Hompage habe.
Gruß Wolfgang
Dateianhänge
INSERT
INSERT
3.png (43.65 KiB) 2009 mal betrachtet
Ouelltabelle
Ouelltabelle
1.png (3.33 KiB) 2009 mal betrachtet
Zieltabelle
Zieltabelle
2.png (4.67 KiB) 2009 mal betrachtet
Barlee
******
Beiträge: 767
Registriert: Sa, 17.12.2005 12:27

Re: Summe einer Abfrage in eine Tabellenspalte eintragen

Beitrag von Barlee »

Hallo Wolfgang,

genau so mag ich die Beispiele. Andernfalls redet man häufig aneinander vorbei.
Das gewünschte Ergebnis erhältst Du durch nur geringfügige Umstellung des bisherigen Codes:

Code: Alles auswählen

SELECT 
"Namen_ID",
CASE WHEN "01" BETWEEN 0 AND 2 THEN "01" ELSE 0 END AS "1_bis3",
CASE WHEN "01" BETWEEN 3 AND 42 THEN "01" ELSE 0 END AS "1_3_42",
CASE WHEN "01" >42 THEN "01" ELSE 0 END AS "1_ab43",
CASE WHEN "02" BETWEEN 0 AND 2 THEN "02" ELSE 0 END AS "2_bis3",
CASE WHEN "02" BETWEEN 3 AND 42 THEN "02" ELSE 0 END AS "2_3_42",
CASE WHEN "02" >42 THEN "02" ELSE 0 END AS "2_ab43",
CASE WHEN "03" BETWEEN 0 AND 2 THEN "03" ELSE 0 END AS "3_bis3",
CASE WHEN "03" BETWEEN 3 AND 42 THEN "03" ELSE 0 END AS "3_3_42",
CASE WHEN "03" >42 THEN "03" ELSE 0 END AS "3_ab43"
FROM
(
SELECT "Namen_ID",
SUM("01") "01",
SUM("02") "02",
SUM("03") "03"
FROM "Tab_Summe"
GROUP BY "Namen_ID"
)
ORDER BY "Namen_ID" 
Zum Fehler bei INSERT kannst Du folgendes kontrollieren:
- es existiert eine Tabelle namens "Namen"?
- der Tabellenname wurde in Anführungsstriche gesetzt? (also INSERT INTO "Namen")
- Tabellennamen richtig geschrieben (Groß / Kleinschreibung)?

INSERT INTO "Namen" gefolgt von obigem SQL lässt sich problemlos und ohne Fehler ausführen.

Zu den eingefügten Grafiken:
1) Dateianhang hochladen > Datei hinzufügen
2) "im Beitrag anzeigen" auswählen

Soviel auf die Schnelle.
Viel Erfolg weiterhin!

Gruß Barlee
Wolfgang M
*
Beiträge: 15
Registriert: Di, 16.03.2010 16:49

Re: Summe einer Abfrage in eine Tabellenspalte eintragen

Beitrag von Wolfgang M »

Hallo Barlee,

ich danke dir vielmals und finde das Forum spitze.

Gruß Wolfgang
Antworten