none
Leere oder "0"-Spalten/Zeilen bei einer Kreuztabellen-Abfrage

    Frage

  • Hallo,

    ich habe eine Kreuztabellen-Abfrage, die mir die Umsätze bei einem Lieferanten tabellarisch anzeigt:

    Als Zeilen-Überschriften die Monate, als Spalten-Überschriften die letzten 3 Jahre...

    Wenn jetzt im vergangen Jahr keine Umsätze getätigt wurden, wird diese Spalte erst garnicht angezeigt.

    Kann ich es einrichten, dass diese Spalten (analog die Zeilen der Monate)  mit "0" als Wert angezeigt werden?

    Danke + Gruß

    Roland

    Donnerstag, 1. Dezember 2011 16:29

Antworten

  • Roland Klassen wrote:
    > ich habe eine Kreuztabellen-Abfrage, die mir die Umsätze bei einem
    > Lieferanten tabellarisch anzeigt:
    >
    > Als Zeilen-Überschriften die Monate, als Spalten-Überschriften die
    > letzten 3 Jahre...
    >
    > Wenn jetzt im vergangen Jahr keine Umsätze getätigt wurden, wird
    > diese Spalte erst garnicht angezeigt.
    >
    > Kann ich es einrichten, dass diese Spalten (analog die Zeilen der
    > Monate)  mit "0" als Wert angezeigt werden?
     
    Da dir sowohl Zeilen- als auch Spaltenüberschriften fehlen können,
    würde ich das über eine Zeittabelle lösen. Die kann man ohnehin
    für allerhand Zwecke in der DB nutzen.
     
    Das ist eine Tabelle, in die man mit ein paar Zeilen Code alle Tage
    der nächsten 20 Jahre einträgt, oder wie optimistisch du halt für
    deine Anwendung bist. ;-)
    Alternativ reicht dir derzeit auch eine mit Feldern für die
    Monatszahlen und Jahren.
     
    Diese Tabelle oder eine entsprechende gruppierende Abfrage
    (bei der ersten Variante) nimmst du dann zusammen mit den
    bisherigen Umsatzdaten in eine Abfrage und verknüpfst sie mit
    einem OUTER JOIN, so dass alle Monate und Jahre der
    Zeittabelle im Ergebnis sind.
     
    Statt dem Umsatzfeld verwendest du eine Nullerlieferanten wie
    nz(Umsatz;0), setzt natürlich wieder deine 3-Jahreskriterien etc.
    ...und fertig.
     
    --
    Servus
    Karl
    *********
     
     
     
    Donnerstag, 1. Dezember 2011 17:18
  • Hallo,

    Roland Klassen wrote:

    Wenn jetzt im vergangen Jahr keine Umsätze getätigt wurden, wird diese
    Spalte erst garnicht angezeigt.

    Ergaenzender Hinweis:

    Leere Spalten koennen durch die IN-Klausel erzwungen werden, auch wenn
    keine Datensaetze vorhanden sind:

    PIVOT [Jahr] IN (2009, 2010, 2011)

    Fuer leere Zeilen gibt es diese Moeglichkeit nicht, dazu muessen
    Datensaetze vorhanden sein, wie es durch Karls Vorschlag mit der
    Kalendertabelle erreicht werden kann.

    Gruss - Peter


    Mitglied im http://www.dbdev.org
    FAQ: http://www.donkarl.com

    Freitag, 2. Dezember 2011 12:17
    Moderator

Alle Antworten

  • Roland Klassen wrote:
    > ich habe eine Kreuztabellen-Abfrage, die mir die Umsätze bei einem
    > Lieferanten tabellarisch anzeigt:
    >
    > Als Zeilen-Überschriften die Monate, als Spalten-Überschriften die
    > letzten 3 Jahre...
    >
    > Wenn jetzt im vergangen Jahr keine Umsätze getätigt wurden, wird
    > diese Spalte erst garnicht angezeigt.
    >
    > Kann ich es einrichten, dass diese Spalten (analog die Zeilen der
    > Monate)  mit "0" als Wert angezeigt werden?
     
    Da dir sowohl Zeilen- als auch Spaltenüberschriften fehlen können,
    würde ich das über eine Zeittabelle lösen. Die kann man ohnehin
    für allerhand Zwecke in der DB nutzen.
     
    Das ist eine Tabelle, in die man mit ein paar Zeilen Code alle Tage
    der nächsten 20 Jahre einträgt, oder wie optimistisch du halt für
    deine Anwendung bist. ;-)
    Alternativ reicht dir derzeit auch eine mit Feldern für die
    Monatszahlen und Jahren.
     
    Diese Tabelle oder eine entsprechende gruppierende Abfrage
    (bei der ersten Variante) nimmst du dann zusammen mit den
    bisherigen Umsatzdaten in eine Abfrage und verknüpfst sie mit
    einem OUTER JOIN, so dass alle Monate und Jahre der
    Zeittabelle im Ergebnis sind.
     
    Statt dem Umsatzfeld verwendest du eine Nullerlieferanten wie
    nz(Umsatz;0), setzt natürlich wieder deine 3-Jahreskriterien etc.
    ...und fertig.
     
    --
    Servus
    Karl
    *********
     
     
     
    Donnerstag, 1. Dezember 2011 17:18
  • Hallo,

    Roland Klassen wrote:

    Wenn jetzt im vergangen Jahr keine Umsätze getätigt wurden, wird diese
    Spalte erst garnicht angezeigt.

    Ergaenzender Hinweis:

    Leere Spalten koennen durch die IN-Klausel erzwungen werden, auch wenn
    keine Datensaetze vorhanden sind:

    PIVOT [Jahr] IN (2009, 2010, 2011)

    Fuer leere Zeilen gibt es diese Moeglichkeit nicht, dazu muessen
    Datensaetze vorhanden sein, wie es durch Karls Vorschlag mit der
    Kalendertabelle erreicht werden kann.

    Gruss - Peter


    Mitglied im http://www.dbdev.org
    FAQ: http://www.donkarl.com

    Freitag, 2. Dezember 2011 12:17
    Moderator
  • Hallo,

    ich habs jetzt (so ähnlich zumindest) wie Karls Vorschlag gelöst. Der Tip mit dem "IN" kam leider zu spät. ;-) Ich habe einfach über die zugrundeliegenden Abfragen "0"-Daten erzwungen, so dass mir auch diese Spalten angezeigt werden.

    Vielen Dank + liebe Grüße

    Roland

    Freitag, 2. Dezember 2011 13:43