Announcement

Collapse
No announcement yet.

Bedingung in Select

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Bedingung in Select

    Hallo zusammen,

    beim Erstellen meines selects komme ich leider nicht mehr weiter.

    Im Wesentlichen besteht die Tabelle aus den Spalten:
    Typ, Datum, Anzahl

    Nun möchte ich gruppiert nach Typ über ein ganzes Jahr hinweg die Summe von Anzahl angezeigt bekommen. Jedoch nicht über das ganze Jahr hinweg, sondern verteilt auf 24 Abschnitte. Und zwar für jeden Monat der 1. - 14. Tag und 15. - Monatsende.
    Das Ergebnis sollte also ungefähr so aussehen:
    Typ | Abschnitt 1| Abschnitt 2 | .... | Abschnitt 52
    A 520 365 412
    B 5000 6520 302
    ....

    Ist es irgendwie möglich das gewünschte in einem Statement zu erlangen, oder muss ich hierfür das unten stehende Statement mit unterschiedlichen Daten 52 mal laufen lassen?

    select Typ, sum(Anzahl)
    from Tabelle
    where datum between '01.01.08' and '14.01.08'
    group by Typ

    Es wäre sehr schön (und extrem zeitsparend) wenn jemand eine Idee hätte!

    Viele Grüße
    dinazen

  • #2
    Sollte per bedingter Summierung funktionieren
    IIF() oder CASE .... WHEN

    Comment


    • #3
      Wenn es das tut, dann bekomme ich es nicht hin.
      IIf habe ich nicht in den SQL Referenzen gefunden, ich nehme an, es wird wohl PLSQL sein, ich hatte gehofft dass der Kelch dieses Mal an mir vorbeigeht.

      bei Case bekomme ich immer die Meldung, "Ausdruck fehlt". unabhängig davon glaube ich, dass es nicht geeignet ist, denn der Ausdruck nach THEN muss ja eine Konstante sein, und hier sollte ja sowas wie sum(anzahl) rein.
      Ich habe es so versucht:
      select Typ, case datum when >= '01.01.08' and <= '14.01.08' then sum(anzahl)
      when >= '15.01.08' and <= '30.01.08' then sum(anzahl)
      from Tabelle1
      group by Typ

      Wobei das auch wenn der Syntax korrekt wäre, vermutlich nicht zum gewünschten Ergebnis führen würde.

      Auf welchem teil des Schlauches stehe ich denn?

      grüße und vielen Dank für die erste Antwort
      dinazen

      Comment


      • #4
        Falsche Syntax
        [highlight="sql"]
        select Typ, sum(case datum when >= '01.01.08' and <= '14.01.08' then anzahl else 0 end) as summe, ...
        [/highlight]

        Comment


        • #5
          Das sieht schon sehr gut aus. Es kommt jedoch noch die Meldung, Ausdrck fehlt und zwar bei ">=", ich nehme an, die Bedingung geht so nicht. Bei SQL Server ist das wohl zu lösen, indem ich "datum >= '01.01.08' " schreibe, bei Oracle 10g (was wir hier verwenden) jedoch leider nicht.

          Comment


          • #6
            Es fehlt der Feldname:
            [highlight="sql"]
            SELECT Typ, sum(case when datum >= '01.01.08' AND datum <= '14.01.08' then anzahl else 0 end) AS summe, ...
            [/highlight]

            Comment


            • #7
              Das wars, herzlichen Dank o.T.

              Das wars, herzlichen Dank o.T.

              Comment

              Working...
              X