Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Hilfe bei Abfrage (Summe)

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von Hazel4tw1, 14 November 2013.

  1. Hazel4tw1

    Hazel4tw1 Aktiver Benutzer

    Hallo,

    habe folgende Abfrage:

    SELECT Temporaer.Jahr,
    Temporaer.Monat,
    SUM (Temporaer.Stunden)
    FROM (SELECT Month(ServiceTickets.Resolution_SLA_Stopped_Date) AS Monat,
    Year(ServiceTickets.Resolution_SLA_Stopped_Date) AS Jahr,
    Sum(ServiceTickets.TimeEntry_Sum_Total) AS Stunden
    FROM ServiceTickets
    WHERE ServiceTickets.Duty_Ticket IS NOT NULL) AS Temporaer
    GROUP BY Temporaer.Jahr,
    Temporaer.Monat
    ORDER BY Temporaer.Jahr,
    Temporaer.Monat

    Warscheinlich habe ich einen groben Gedanken Fehler und deswegen funktioniert das nicht.

    Es soll am Ende eine Tabelle mit 3 Spalten rauskommen, mit 12 Zeilen
    wo jeweils in der ersten immer 2012 steht, in der zweiten der jeweilige Monat (1-12) und in der dritten die zusammen gefassten Stunden (summe) des jeweiligen Monats.

    Ich hoffe ihr könnt mir helfen.

    Mit freundlichen Grüßen
     
  2. akretschmer

    akretschmer Datenbank-Guru


    Was passiert denn? Viel zu viele Stunden? Kein Wunder, Du summierst auch doppelt und hast in der inneren Abfrage kein GROUP BY.

    FAIL.

    Andreas
     
  3. Hazel4tw1

    Hazel4tw1 Aktiver Benutzer

    Ja genau, habe zu viele Stunden.
    Das doppelte SUM war natürlich unabsichtlich.

    SELECT Temporaer.Jahr,
    Temporaer.Monat,
    Temporaer.Stunden
    FROM (SELECT Month(ServiceTickets.Resolution_SLA_Stopped_Date) AS Monat,
    Year(ServiceTickets.Resolution_SLA_Stopped_Date) AS Jahr,
    Sum(ServiceTickets.TimeEntry_Sum_Total) AS Stunden
    FROM ServiceTickets
    WHERE ServiceTickets.Duty_Ticket IS NOT NULL
    GROUP BY Temporaer.Jahr,
    Temporaer.Monat
    ORDER BY Temporaer.Jahr,
    Temporaer.Monat) AS Temporaer

    Setz ich das Group by in die innere Abfrage kommt folgender Fehler:
    Msg 1033, Level 15, State 1, Line 12
    The ORDER BY clause is invalid in views, inline functions, derived tables, subqueries, and common table expressions, unless TOP or FOR XML is also specified.
     
  4. akretschmer

    akretschmer Datenbank-Guru

    Schon besser. Nun läßt das äußere noch weg und dann ist vielleicht alles gut. Falls MySQL mitspielt.
     
  5. Hazel4tw1

    Hazel4tw1 Aktiver Benutzer

    Was meinst du mit dem äußeren?
    Etwa so?

    SELECT *
    FROM (SELECT Month(ServiceTickets.Resolution_SLA_Stopped_Date) AS Monat,
    Year(ServiceTickets.Resolution_SLA_Stopped_Date) AS Jahr,
    Sum(ServiceTickets.TimeEntry_Sum_Total) AS Stunden
    FROM ServiceTickets
    WHERE ServiceTickets.Duty_Ticket IS NOT NULL
    GROUP BY Temporaer.Jahr,
    Temporaer.Monat
    ORDER BY Temporaer.Jahr,
    Temporaer.Monat) AS Temporaer

    kommt trotzdem der Fehler:

    Msg 1033, Level 15, State 1, Line 10
    The ORDER BY clause is invalid in views, inline functions, derived tables, subqueries, and common table expressions, unless TOP or FOR XML is also specified.
     
  6. akretschmer

    akretschmer Datenbank-Guru

    Das äußere Select. Das ist flüssiger als Wasser, also quasi überflüssig.
     
  7. Hazel4tw1

    Hazel4tw1 Aktiver Benutzer

    Wenn ich kein Select im Select habe kann ich doch nicht nach Aliasen gruppieren bzw sortieren?
     
  8. akretschmer

    akretschmer Datenbank-Guru

    Du sortierst doch auch nicht im äußeren select.
     
  9. ukulele

    ukulele Datenbank-Guru

    Code:
    SELECT    *
    FROM    (    SELECT    month(ServiceTickets.Resolution_SLA_Stopped_Date) AS Monat,
                        year(ServiceTickets.Resolution_SLA_Stopped_Date) AS Jahr,
                        sum(ServiceTickets.TimeEntry_Sum_Total) AS Stunden
                FROM    ServiceTickets
                WHERE    ServiceTickets.Duty_Ticket IS NOT NULL ) Temporaer
    GROUP BY Temporaer.Jahr,Temporaer.Monat
    ORDER BY Temporaer.Jahr,Temporaer.Monat
    PS: Falsches Unterforum, du hast MS SQL Server.
     
  10. akretschmer

    akretschmer Datenbank-Guru

    Da kann man auch Aggregieren ohne Gruppieren? Also da in dem inneren Select machst das ja. Ich hätt gedacht, so doof ist nur MySQL, muß ich wohl mein Weltbild korrigieren...
     
  11. ukulele

    ukulele Datenbank-Guru

    Natürlich nicht, ich war von dem Temporaer Alias irritiert und hab die Klammer verschoben.
    Code:
    SELECT    *
    FROM    (    SELECT    month(ServiceTickets.Resolution_SLA_Stopped_Date) AS Monat,
                        year(ServiceTickets.Resolution_SLA_Stopped_Date) AS Jahr,
                        sum(ServiceTickets.TimeEntry_Sum_Total) AS Stunden
                FROM    ServiceTickets
                WHERE    ServiceTickets.Duty_Ticket IS NOT NULL
                GROUP BY Jahr,Monat ) AS Temporaer
    ORDER BY Temporaer.Jahr,Temporaer.Monat
     
  12. akretschmer

    akretschmer Datenbank-Guru

    Okay, dann kann ich mich wieder beruhigt zurücklehnen ;-)
     
  13. Hazel4tw1

    Hazel4tw1 Aktiver Benutzer

    Hi ukele,
    die Abfrage funktioniert leider auch nicht, so hatte ich es auch probiert.

    Fehler:
    Msg 4104, Level 16, State 1, Line 7
    The multi-part identifier "Temporaer.Jahr" could not be bound.
    Msg 4104, Level 16, State 1, Line 8
    The multi-part identifier "Temporaer.Monat" could not be bound.

    EDIT: Sry für das falsche Forum
     
    Zuletzt bearbeitet: 14 November 2013
  14. akretschmer

    akretschmer Datenbank-Guru

    Um der lieben Ordnung willen: @Walter , bitte in das richtige Forum verschieben ;-)
     
  15. Hazel4tw1

    Hazel4tw1 Aktiver Benutzer

    Achja, der Fehler meint die Sätze Jahr und Monat aus der Group By Klausel.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden