Sabine Hauser: Frage zu einem SQL-Coding (IBM DB2)

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....

  1. 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

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. 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

      1. 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.

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes