Announcement

Collapse
No announcement yet.

Datum sortieren Deluxe.

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

  • Datum sortieren Deluxe.

    Hallo erstmal...bin neu hier und somit auch Newbie auf dem SQL Gebiet.


    Ich habe eine Date-Spalte, in der das Datum und die Uhrzeit steht:

    dd.mm.yyyy hh.mm.ss

    Um eine Umsatzübersicht von Herstellern in einem Plz-Gebiet im jeweiligen Monat und Jahr zuerfassen, hab ich folgenden Code angelegt:


    Code:
    SELECT LEFT ([Plz], 2) AS Plz_Gebiet
                           ,month([Datum]) AS Monat
                           ,year([Datum]) AS Jahr
                           ,sum([Umsätze]) AS Gesamtumsatz
    
               From [Umsatz_Belege], [Hersteller]
    
               WHERE (Herstellernummer = '0815')
    
               Group by Plz, Datum
    
               Order by Plz, Datum
    Leider fasst er nicht alle Tage im Monat zusammen, sodass mehrfache Umsätze mit gleicher Plz, Monat und Jahr aufgelistet werden.

    PLZ....Monat.....Jahr......Gesamtumsatz
    04.........1.........2008.............100
    04.........2.........2008.............300
    05.........1.........2008.............500
    05.........1.........2008.............300
    .
    .

    Woran liegts?

  • #2
    Originally posted by Brodi View Post
    Woran liegts?
    statt nach

    Datum

    nach

    , month([Datum])
    ,year([Datum])

    gruppieren

    Comment


    • #3
      Hallo.

      MSSQL kennt dafür die DatePart() - Funktion. Außerdem muss im Group By quasi der gleiche Ausdruck wie im SELECT stehen.
      Der SQL Server würde deine Abfrage deshalb gar nicht ausführen, MySQL macht es scheinbar und bringt dafür das von dir genannte falsche Ergebnis.

      Probier' mal sowas (ungetestet):


      Code:
      SELECT LEFT ([Plz], 2) AS Plz_Gebiet
                             ,DatePart(mm,[Datum]) AS Monat
                             ,DatePart(yyyy,[Datum]) AS Jahr
                             ,sum([Umsätze]) AS Gesamtumsatz
      
                 From [Umsatz_Belege], [Hersteller]
      
                 WHERE (Herstellernummer = '0815')
      
                 Group by  LEFT ([Plz], 2),
                                DatePart(mm,[Datum]),
                                DatePart(yyyy,[Datum])
                 Order by  LEFT ([Plz], 2),
                                DatePart(mm,[Datum]),
                                DatePart(yyyy,[Datum])
      Viel Erfolg!
      Tino
      Ich habs gleich!
      ... sagte der Programmierer.

      Comment


      • #4
        Also zum Einem richtig gruppieren
        richtig Joinen wär auch nicht verkehrt (siehe ?????)
        [HIGHLIGHT="SQL"]SELECT LEFT ([Plz], 2) AS Plz_Gebiet
        , DATEPART(mm,[Datum]) AS Monat
        , DATEPART(yyyy,[Datum]) AS Jahr
        , SUM ([Umsätze]) AS Gesamtumsatz
        FROM Umsatz_Belege AS U
        JOIN Hersteller AS H ON ??????
        AND Herstellernummer = '0815'
        GROUP BY LEFT ([Plz], 2)
        , DATEPART(mm,[Datum])
        , DATEPART(yyyy,[Datum])
        ORDER BY Plz, Datum[/HIGHLIGHT]

        Comment


        • #5
          Problem ist: das Ergebnis ist wie vorher!

          ich vermute das intern quasi unsichtbar nach Tagen noch sortiert wird.

          Was sich aber eben meiner Logik völlig entzieht.
          Zuletzt editiert von Brodi; 06.05.2010, 15:34.

          Comment


          • #6
            Originally posted by Brodi View Post
            Problem ist: das Ergebnis ist wie vorher!

            ich vermute das intern quasi unsichtbar nach Tagen noch sortiert wird.

            Was sich aber eben meiner Logik völlig entzieht.
            Wenn Du wissen willst, was Du falsch machst, dann poste mal

            1) CREATE-Statements der beiden Tabellen,
            2) INSERT-Statements von ein paar testdaten in diese Tabellen
            und 3) dein Select-Statement

            Comment


            • #7
              Hallo ebis, was macht die Kunst?
              Zu #3:
              ORDER BY Plz, Datum
              Das kann nicht gehen, da sowohl PLZ als ganzes und Datum "is invalid in the ORDER BY clause because it is not contained in either an aggregate function or the GROUP BY clause."

              Brodi, wenn das bei trotzdem geht und das gleiche Ergebnis wie zuvor bei raus kommt, keimt bei mir etwas der Verdacht hoch, das es sich um ein altes mySQL handelt (und nicht MS SQL), wo das ging, weil dann einfach implizit "Datum" mit ins GROUP aufgenommen wurde.

              Mal vom ORDER BY Datum... abgesehen, ist die Antwort von ebis korrekt.

              [highlight=SQL]SELECT LEFT ([Plz], 2) AS Plz_Gebiet
              , DATEPART(mm,[Datum]) AS Monat
              , DATEPART(yyyy,[Datum]) AS Jahr
              , SUM ([Umsätze]) AS Gesamtumsatz
              FROM Umsatz_Belege AS U
              JOIN Hersteller AS H ON ??????
              AND Herstellernummer = '0815'
              GROUP BY LEFT ([Plz], 2)
              , DATEPART(mm,[Datum])
              , DATEPART(yyyy,[Datum])
              ORDER BY LEFT ([Plz], 2)
              , DATEPART(mm,[Datum])
              , DATEPART(yyyy,[Datum])[/highlight]
              Olaf Helper

              <Blog> <Xing>
              * cogito ergo sum * errare humanum est * quote erat demonstrandum *
              Wenn ich denke, ist das ein Fehler und das beweise ich täglich

              Comment


              • #8
                Nein...mit dem Order by Datum hat auch nicht funktioniert. Aber bin da jetzt nicht weiter drauf eingegangen, weil es ja nicht von Bedeutung ist.

                @Ebis

                kann die Statements nicht posten da die Abfrage über 3 Tabellen geschachtelt wird und ich nur das grundgerüst meines genannten Problem gepostet hab, wobei das Problem trotzdem auch im Grundgerüst besteht. Zumind. bin ich gerade zu faul das alles ab zutippen....
                Und vom Server selbst komm ich nicht ins Internet!

                Comment


                • #9
                  Wo wir gerade so fein drin stecken...

                  wie kann ich aus den einzelnen berechneten Umsätzen, nochmal einen insgesamten Gesamtwert berechnen? sprich: wo man in einer extra Spalte den Gesamtumsatz über den gesamten Zeitraum des entsprechenden Herstellers sieht.

                  mfg

                  Comment


                  • #10
                    Eine extra Spalte? Das geht mit einem Subselect.
                    Olaf Helper

                    <Blog> <Xing>
                    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
                    Wenn ich denke, ist das ein Fehler und das beweise ich täglich

                    Comment


                    • #11
                      passt...Danke!

                      Comment


                      • #12
                        Okay und zum Abschluss noch eine Frage :

                        Der Gesamtumsatz vom ganzen Zeitraum wird ja jetzt für jede Zeile extra angezeigt. Wie kann ich das Ergebnis nur ein einziges mal in einer einzigen Zeile dieser Spalte (am Kopf oder Fussende), unabhängig von den anderen Spalten anzeigen lassen?!

                        Wenn jetzt hierfür eine Lösung kommt, danke ich euch wie verrückt!

                        Comment


                        • #13
                          Schau mal in BOL (Microsoft Hilfe) unter Stichworten GROUP BY WITH ROLLUP und GROUPING nach...

                          Comment


                          • #14
                            hm...das funktioniert leider nicht.

                            Comment


                            • #15
                              Da wirst Du schon auf die BOL verwiesen und MS hat sich da wirklich viel Mühe gegeben und alles gut und umfangreich beschrieben ....

                              Geht mit

                              GROUP BY .... WITH CUBE

                              Dann bekommst Du allerdings Summen für alle Kombinationen.
                              Eigentlich überlässt man solche Summenbildungen der Report Engine.
                              Olaf Helper

                              <Blog> <Xing>
                              * cogito ergo sum * errare humanum est * quote erat demonstrandum *
                              Wenn ich denke, ist das ein Fehler und das beweise ich täglich

                              Comment

                              Working...
                              X