Announcement

Collapse
No announcement yet.

SQL Statement f. Sortieren und tlw. Summieren

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

  • SQL Statement f. Sortieren und tlw. Summieren

    Hallo Gemeinde,

    das ist mein erster Beitrag in diesem Forum, ich will hoffen ich bin hier gut aufgehoben und wende mich mit einer mehr oder weniger Anfängerfrage an Euch..

    Ich habe zahlreiche Datenbanken auf einem MS SQL Server, als Linuxer bin ich bis dato immer den Umweg über eine CSV Datei gegangen und habe diese dann per Skript auf Bash verarbeitet. Mit etwas Osterzeit habe ich mir endlich die ODBC Quellen von Linux zu MS SQL nähergebracht und bin recht begeistert nur schlecht bewandert in SQL.

    Ich habe eine Tabelle in folgender Form :

    Tabelle "Journal"
    Spalten "Datum" - "Kasse" - "Konto" - "Brutto"

    Eine nette Übersicht über zBsp. den 03.04.2010 bekomme ich bereits schnell und einfach mit php und diesem Statement

    Code:
    SELECT Datum, Kasse, Konto, Brutto FROM Journal WHERE Konto = 1460 AND Datum = "2010-04-03" ORDER BY Kasse, Datum"
    Nun würde ich eine Ausgabe benötigen die mir die gesamten "Brutto" Beträge eines Tages summiert und mir trotzdem die benötigte Liste ausgibt in welcher ich Datum, Kasse, Brutto ersehen kann.

    Kann mir jemand helfen, ich arbeite mich an SQL nach 8 jähriger Abwesenheit erst wieder heran und würde mich sehr freuen einen kleinen Schubs zu bekommen

    Liebe Grüsse,

    Stefan
    --
    Administrator mit Debian (Samba,Motion,HA-Cluster,Corosync,MsSQL,Asterisk,Nagios,Hylafax) Windows Server (MS SQL 2005,Project,Exchange)

  • #2
    Deine Frage ist mir nicht ganz klar, kannst du mal das Beispiel einer Ausgabe zeigen?

    Bzw. probiere mal das:
    Code:
    SELECT convert(varchar,Datum,112) as Datum, Kasse, Konto, SUM(Brutto) as Summe
    FROM Journal 
    GROUP BY convert(varchar,Datum,112), Kasse, Konto
    ORDER BY Kasse, Datum
    bye,
    Helmut

    Comment


    • #3
      Hallo Stefan,

      solche Gruppensummen zu bilden, ist eigentlich eher Aufgabe des Frontend / Reporting Engine.

      In T-SQL bekommst Du es höchsten noch mit GROUP BY ROLLUP(..) hin, siehe
      MSDN: Verwenden von GROUP BY mit ROLLUP, CUBE und GROUPING SETS

      wobei es die Grouping Sets erst ab MS SQL Server 2008 gibt.
      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


      • #4
        Hallo Helmut, Hallo Helper,

        ich war positiv überrascht was alles mit SQL geht, die graue Theorie des Studiums hatte das etwas vernachlässigt

        Okay, wie geschrieben - noch etwas hilfebedürftig, aber ich lerne schnell -

        Sinn und Zweck soll es sein das ich eine möglichst gut vorbereite ASCii Ausgabe der Bruttobeträge verschd. Kassen bekomme, immer für einen gewählten (dynamischen) Zeitraum, das lasse ich per Skript erarbeiten und dann als $datum einsetzen - das klappt soweit.

        Da ich nun mit vielen Dingen rumhantieren muss wäre es eine große Hilfe wenn ich die Summe der gezählten "Brutto"s direkt summiert ausgegeben bekommen würde.

        Die aktuelle Ausgabe sieht in etwa so aus (stark verkürzt) :

        Code:
        DATUM - KONTO - KASSE - BRUTTO
        2010-04-03 - 1460 - 1 - 1485,25
        2010-04-03 - 1460 - 2 - 857,00
        2010-04-03 - 1460 - 3 - 1589,12
        [...]
        Nun wäre es traumhaft hier eine Summe zu bilden - ODER - aber eine weitere Abfrage auszuführen die die Summe dann ans Ende packt, ist ja auch ein Weg nach Rom.

        Im Allgemeinen lese ich mir aktuell jede Art von SQL Wiedereinstiegs Sites durch, aber am besten lernt man es learning by doing.

        Hier seie nochmals Danke gesagt für Eure Zeit!

        Stefan
        --
        Administrator mit Debian (Samba,Motion,HA-Cluster,Corosync,MsSQL,Asterisk,Nagios,Hylafax) Windows Server (MS SQL 2005,Project,Exchange)

        Comment


        • #5
          Hallo Stefan,

          ohne Funktionen zu verwenden, die es erst ab Version 2008 gibt, könntest Du es so lösen:
          [highlight=SQL]CREATE TABLE #KB
          (datum datetime, konto int, kasse int, brutto money);
          INSERT INTO #KB VALUES ('2010-04-03', 1460, 1, 1485.25);
          INSERT INTO #KB VALUES ('2010-04-03', 1460, 2, 857.00);
          INSERT INTO #KB VALUES ('2010-04-03', 1460, 3, 1589.12);
          INSERT INTO #KB VALUES ('2010-04-04', 1460, 3, 123.12);
          GO

          SELECT *
          FROM (SELECT datum, konto, kasse, brutto
          FROM #KB
          UNION ALL
          SELECT datum, NULL AS konto, NULL AS kasse, SUM(brutto)
          FROM #KB
          GROUP BY datum
          ) AS SUB
          ORDER BY datum
          ,CASE WHEN konto IS NULL THEN 1 ELSE 0 END
          ,konto

          GO
          DROP TABLE #KB;[/highlight]
          Ergebnis
          [highlight=code]datum konto kasse brutto
          ----------------------- ----------- ----------- ---------------------
          2010-03-04 00:00:00.000 1460 1 1485,25
          2010-03-04 00:00:00.000 1460 2 857,00
          2010-03-04 00:00:00.000 1460 3 1589,12
          2010-03-04 00:00:00.000 NULL NULL 3931,37
          2010-04-04 00:00:00.000 1460 3 123,12
          2010-04-04 00:00:00.000 NULL NULL 123,12[/highlight]
          Die Summen werden also hier mit Konto/Kasse = NULL ausgegeben. Wenn die Felder varchar sind, könntest Du statt NULL auch 'Gesamt' ausgeben.
          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