Frage zu einem SQL-Coding (IBM DB2)
Sabine Hauser
- datenbank
1 Cheatah0 Sabine Hauser1 Cheatah
Hallo Forumsmitglieder,
ich wende mich mit einer JOIN-Frage an Euch.
Hier mein Versuch:
SELECT Feld1, Datum,
SUM(COL1+COL2) / COL2
FROM Tabelle1
WHERE Feld1 LIKE
(SELECT Feld1
FROM Tabelle2)
GROUP BY Feld1, Datum
TABELLE1
FELD1 DATUM COL1 COL2
AA1 02.2008 10 20
AB5 02.2008 20 10
BB1 02.2008 15 30
BB4 02.2008 10 10
CC1 02.2008 30 10
....
TABELLE2 (hier stehen die "Suchschlüssel")
FELD1
'A%'
'B%'
Die Abfrage soll nun folgendes Ergebnis liefern:
TABELLE3
FELD1 DATUM COL1
A 02.2008 2 (10+20+20+10) / (20+10)
B 02.2008 1,6
ich bin dankbar für jede Hilfe....
Hi,
Disclaimer: IBM DB2 kenne ich nicht näher, aber ...
WHERE Feld1 LIKE
(SELECT Feld1
FROM Tabelle2)
... LIKE erwartet nach meiner Erfahrung _einen_ Wert, kein Resultset.
Die Abfrage soll nun folgendes Ergebnis liefern:
Und was passiert statt dessen? Das Röhren der Festplatte scheucht den Hund auf, der dann die Katze beißt, welche erschreckt auf den Baum springt und dabei einen Vogel verjagt, der in wilder Panik mit voller Wucht gegen Deinen Monitor fliegt?
Cheatah
LIKE erwartet unter DB2 keinen konkreten Wert.
SELECT * FROM TAB WHERE FIELD1 LIKE 'A%' liefert alle Sätze, wo FIELD1 mit A beginnt.
Mein Problem besteht zum einen in der richtigen Syntax, die tabellen zu verknüpfen, zum anderen weiß ich nicht, wie ich in der Ergebnistabelle nur die aggregierten Werte (2 Einträge der TAB2 * 12 Monatswerte aus TAB 1 = 24 Sätze in der TAB3) ausgewiesen bekomme.
Dein letzter Satz ist wenig hilfreich
Hi,
Disclaimer: IBM DB2 kenne ich nicht näher, aber ...
WHERE Feld1 LIKE
(SELECT Feld1
FROM Tabelle2)... LIKE erwartet nach meiner Erfahrung _einen_ Wert, kein Resultset.
Die Abfrage soll nun folgendes Ergebnis liefern:
Und was passiert statt dessen? Das Röhren der Festplatte scheucht den Hund auf, der dann die Katze beißt, welche erschreckt auf den Baum springt und dabei einen Vogel verjagt, der in wilder Panik mit voller Wucht gegen Deinen Monitor fliegt?
Cheatah
Hi,
LIKE erwartet unter DB2 keinen konkreten Wert.
SELECT * FROM TAB WHERE FIELD1 LIKE 'A%' liefert alle Sätze, wo FIELD1 mit A beginnt.
ja, aber ist es auch möglich, etwa folgendes zu sagen:
SELECT * FROM TAB WHERE FIELD1 LIKE ('A%', 'B%')
In den mir bekannten DBMSsen würde ich hier einen Fehler erwarten[1].
Dein letzter Satz ist wenig hilfreich
Das liegt daran, dass das, worauf er sich bezieht, *überhaupt nicht* hilfreich ist. Deine Problembeschreibung ist unzureichend, es ist dadurch unmöglich, Dir zu helfen.
Apropos Bezug:
Hi,
Bitte zitiere nur das, worauf Du Dich beziehst, und antworte dann in einer in Mitteleuropa üblichen Leserichtung. Danke.
Cheatah
[1] Und in einer idealen Welt zusätzlich die Warnung, dass "SELECT *" nicht sinnvoll ist.