Matthias: Zählen von Nullwerten

Hallo zusammen,

ich habe ein (für mich) kniffliges SQL-Problem. Es geht vereinfacht um Folgendes: Ich habe eine Liste von Einträgen mit Zeitstempel in einer Tabelle, so:

BEISPIEL
DATUM TEXT
2009-05-17 bla
2009-05-19 blubb
2009-05-19 blubber

Nun möchte ich zählen, wieviele Einträge es pro Zeiteinheit (hier: Tag) gibt - soweit, so einfach:

Select DATUM, count(*) AS Count from BEISPIEL Group By DATUM

Ergebnis:
DATUM COUNT
2009-05-17 1
2009-05-19 2

Nun hätte ich aber gern auch Daten angezeigt, für die es keine Einträge gibt, nämlich so:

gewünschtes Ergebnis:
DATUM COUNT
2009-05-17 1
2009-05-18 0
2009-05-19 2

Warum? Ich möchte mehrere solcher Abfragen machen, die verschiedene Dinge zählen, und die Zahlenkolonnen zum Vergleichen nebeneinander stellen - ohne von Hand "Leerzeilen" einfügen zu müssen. In Wirklichkeit ist das Ganze natürlich noch etwas komplizierter, aber wenn das hier gelöst würde, würde ich erstmal selbst weiterfummeln.

Vielen Dank für eure Hilfe!

Matthias

  1. Hi,

    ich habe ein (für mich) kniffliges SQL-Problem.

    ich habe einen (für mich, und bald auch für Dich) einfachen Suchbegriff: OUTER JOIN.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hi Cheatah,

      ich habe einen (für mich, und bald auch für Dich) einfachen Suchbegriff: OUTER JOIN.

      Was willst Du denn da JOINen, wenn die Tage ohne Eintraege in keiner Tabelle stehen?

      viele Gruesse,
      der Bademeister

      1. Mahlzeit Bademeister,

        Was willst Du denn da JOINen, wenn die Tage ohne Eintraege in keiner Tabelle stehen?

        Z.B. indem man mit den beim betroffenen (aber nicht genannten) DBMS verfügbaren Bordmitteln eine temporäre Tabelle erzeugt, die für den gewünschten Zeitraum je einen Datensatz enthält, der mindestens eine Spalte mit dem jeweiligen Datum beinhaltet ...

        MfG,
        EKKi

        --
        sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
        1. Hi,

          Z.B. indem man mit den beim betroffenen (aber nicht genannten) DBMS verfügbaren Bordmitteln eine temporäre Tabelle erzeugt, die für den gewünschten Zeitraum je einen Datensatz enthält, der mindestens eine Spalte mit dem jeweiligen Datum beinhaltet ...

          am Beispiel MySQL, wie wuerde das denn gehen?

          danke, viele Gruesse
          der Bademeister

          1. echo $begrüßung;

            » Z.B. indem man mit den beim betroffenen (aber nicht genannten) DBMS verfügbaren Bordmitteln eine temporäre Tabelle erzeugt, die für den gewünschten Zeitraum je einen Datensatz enthält, der mindestens eine Spalte mit dem jeweiligen Datum beinhaltet ...
            am Beispiel MySQL, wie wuerde das denn gehen?

            Nun, aktuelle MySQL-Versionen hören im Funktionsumfang nicht mehr beim RUDI/CRUD[*] auf sondern bieten Stored Programms (= Stored Procedures + Stored Functions). Damit lassen sich nicht komplexe Berechnungsvorgänge an vorhandenen Daten in einem Aufruf kapseln sondern es lassen sich auch Daten quasi erzeugen. Eine FOR-Schleife gibt es zwar nicht, doch das Verhalten kann man mit den Flow Control Constructs und einer Variablen nachbilden.

            Ein direktes Beispiel bringe ich nicht, die für die Lösungsfindung interessanten Handbuchstellen habe ich aber verlinkt. Hintergrund ist, dass man sich bei der eigenen Recherche einen guten Überblick auch über die restlichen Möglichkeiten machen kann. Bei konkreten Verständnisproblemen bitte konkret nachfragen.

            [*] RUDI: Read Update Delete Insert; CRUD: Create statt Read

            echo "$verabschiedung $name";

        2. Erstmal Danke für die bisherigen Antworten.

          Es handelt sich um einen MS SQL-Server, allerings findet die Abfrage aus Excel 2007 heraus statt, was mich dazu verdammt, den "Microsoft Query Wizard" zu benutzen, und das ganze mit einem einzigen Statement zu erschlagen, dass dieses tolle Stück Software auch noch verstehen und darstellen können muss - weil es mich sonst keine Parameter benutzen lässt.
          Ich fürchte, da sieht es mit der temporären Tabelle schwarz aus.

          Abgesehen von einem Systemwechsel: Gibt es Alternativen?

          -----

          Wenn doch Systemwechsel: Kennt jemand was empfehlenswertes? Wie macht man (möglichst einfach, nur für den internen Gebrauch, einfach anpassbar) ein bisschen Reporting auf einem MS SQL-Server, wenn Excel an seine Grenzen stösst?

          1. Ich hatte ja erwartet, bei der Erwähnung des MS Query Wizard ein gequältes Stöhnen zu hören, oder einen entsetzten Aufschrei - aber Schweigen im Walde? Keiner der sich dazu äussern will?

            Ich habe jetzt einfach in der DB eine neue Tabelle mit nur einer Spalte "weeknumber" un dem Inhalt 1, 2, 3, ... 53 angelegt und joine damit. und da ich eh schon ander DB rumfummel, bastle ich gerade noch views, wo OLAP-mässig für alle Dimensionen einzeln gezählt wird:

            weekday, Year, Merkmal1_ID, Merkmal2_ID, Merkmal3_ID, Anzahl

            Diese Tabelle will ich dann aus dem Excel mit entsprechenden Parametern (Year = 2009, Merkmal1 = sowieso usw) abfragen. Das ganze Gebastel bringt mich aber zu der Frage, ob man es nicht doch gleich "richtig" machen sollte.

            Darum nochmal: Wie macht man sinnvollerweise Reporting auf einer MS SQL-Datenbank, wenn Excel nicht mehr ausreicht, eine richtige Reportinganwendung aber zu aufwändig, kompliziert und teuer ist? Vielleicht hat jemand einen guten Tipp parat, z.B. ein nettes OS-Tool? Logparser ist mir auch noch eingefallen, aber da bin ich sicher genausolange am basteln wie wenn ich selbst Views schnitze und direkt aus dem Excel abfrage. Plaudert doch ma ein bisschen aus eurem Erfahrungskästchen... ;)

            1. Yerf!

              Darum nochmal: Wie macht man sinnvollerweise Reporting auf einer MS SQL-Datenbank, wenn Excel nicht mehr ausreicht, eine richtige Reportinganwendung aber zu aufwändig, kompliziert und teuer ist?

              Keine richtigen Erfahrungen, aber ne Idee: sind die Reporting-Fähigkeiten von Access vielleicht besser geeignet, als die von Excel?

              Jedenfalls ist es möglich sich mittels Access auf ein anderes DB-System draufzusetzen und dieses als Datenbasis zu verwenden. Views müssten sich dann eigentlich innerhalb der MDB realisieren lassen.

              Gruß,

              Harlequin

              --
              <!--[if IE]>This page is best viewed with a webbrowser. Get one today!<![endif]-->
            2. Hallo,

              Ich hatte ja erwartet, bei der Erwähnung des MS Query Wizard ein gequältes Stöhnen zu hören, oder einen entsetzten Aufschrei - aber Schweigen im Walde? Keiner der sich dazu äussern will?

              warum folgst Du nicht den Hinweisen von dedlfix?
              Stored Procedures gab's in MS SQL-Server, seit ich den kenne.

              Freundliche Grüße

              Vinzenz