Announcement

Collapse
No announcement yet.

Problem beim Erstellen einer Else-If-Abfrage

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

  • Problem beim Erstellen einer Else-If-Abfrage

    Guten Tag

    Ich habe ein Problem beim Umschreiben eines Queries. Dieses lautet im Original:
    Code:
    SUM(CAST(image.kbyte AS BIGINT)) / 1048576.00000 AS 'result' 
       FROM image 
       WHERE 20070312 BETWEEN image.date AND image.expiration
    Nun möchte ich dieses umschreiben, damit ich mehrere Tage gleichzeitig abfragen kann. Das habe ich folgendermassen versucht:
    Code:
    IF 20070301 between [image.date] AND [image.expiration] 
       BEGIN
         SELECT SUM(CAST([image.kbyte] AS BIGINT)) / 1048576.00000 AS '01.03.2007' 
    	FROM image 
       END
    ELSE IF 20070302 between [image.date] AND [image.expiration] 
       BEGIN
          SELECT SUM(CAST([image.kbyte] AS BIGINT)) / 1048576.00000 AS '02.03.2007' 
    	FROM image 
       END
    Leider funktioniert das nicht.
    Weiss jemand ob das so überhaupt möglich ist und falls ja, was daran falsch ist?

    Ich bin dankbar für jeden Hinweis. Das Original ist nicht von mir und ich habe nur wenig SQL-Kenntnisse.

    Gruss
    Tanja
    Zuletzt editiert von pervenches; 19.03.2007, 15:14.

  • #2
    Hallo Tanja,

    ich vermute mal, dass Du auch für weitere Tage diese Abfrage erweitern möchtest. Ich würde Dir vorschlagen, dass Du eine Hilfstabelle erzeugst, die die entsprechenden Datumswerte enthält, und Du dann mit der Tabelle [image] verbindest. Etwa so:
    Code:
    CREATE TABLE DateValues (MyDate int not null)
    INSERT INTO DateValues values(20070301)
    INSERT INTO DateValues values(20070302)
    INSERT INTO DateValues values(20070303)  --...
    
    SELECT a.MyDate, SUM(CAST([b.kbyte] AS BIGINT)) / 1048576.00000 AS GB
    FROM DateValues a
      INNER JOIN images b ON a.MyDate BETWEEN b.date AND b.expiration
    GROUP BY a.MyDate
    So erhältst Du pro Tageseintrag in [DateValues] die aufsummierten Werte.

    Gruß
    Olaf

    Comment


    • #3
      Hallo!

      Wenn es sich tatsächlich IMMER nur um zwei Datumsangaben dreht tuts auch ein:
      SELECT '01.03.2007' as DATE, cast( SUM(kbyte) as BIGINT) / 1048576.00000 AS SIZE FROM image where '01.03.2007' between image.date and image.expiration
      UNION
      SELECT '02.03.2007' as DATE, cast( SUM(kbyte) as BIGINT) / 1048576.00000 AS SIZE FROM image where '02.03.2007' between image.date and image.expiration

      Obwohl ich mir nicht sicher bin könnte es sein, das es besser ist erst die Summe zu bilden und dann erst zu casten. Wahrscheinlich wird sonst erstmal JEDER Wert gecastet.

      Wenn es mehr als zwei Datumsangaben werden ist Olafs Weg der entschieden bessere!!! (Auch dort würde ich Sum und Cast gegeneinander austauschen)

      BYE BERND

      Comment


      • #4
        Hallo

        Herzlichen Dank für Eure Hilfe!

        Soeben habe ich das mit den Hilfstabellen im Query Analyser ausprobiert.
        Nun erhalte ich eine Fehlermeldung:

        Invalid column name 'b.kbyte'.

        Muss die Image-Tabelle noch mit b referenziert werden und wie macht man das?

        Code:
        CREATE TABLE DateValues (MyDate int not null)
        INSERT INTO DateValues values(20070301)
        INSERT INTO DateValues values(20070302)
        INSERT INTO DateValues values(20070303)
        INSERT INTO DateValues values(20070304)
        INSERT INTO DateValues values(20070305)
        INSERT INTO DateValues values(20070306)
        INSERT INTO DateValues values(20070307)
        
        SELECT a.MyDate, SUM(CAST([b.kbyte] AS BIGINT)) / 1048576.00000 AS GB
        FROM DateValues a
          INNER JOIN image b ON a.MyDate BETWEEN b.date AND b.expiration
        GROUP BY a.MyDate
        
        DROP TABLE DateValues
        Gruss
        Tanja

        Comment


        • #5
          das muss lauten b.[kbyte]

          Gruß
          Thomas

          Comment


          • #6
            Allen ein ganz herzliches Dankeschön!
            Es funktioniert.

            Gruss
            Tanja

            Comment

            Working...
            X