Willkommen bei Entwickler-Forum.
Seite 1 von 2 1 2 LetzteLetzte
Ergebnis 1 bis 10 von 17
  1. #1
    Zaungast
    Registriert seit
    14.10.2012
    Beiträge
    24

    Standard kleiner als bei nichtgemeinsamer Schnittmenge

    Hallo Zusammen,

    wieder einmal eine Bitte um Hilfe.

    Für eine Abfrage möchte ich zwei Tabellen vergleichen, aus einer Tabelle alle Werte, aus der anderen alle Werte welche kleiner/gleich dem Maximalwert der XeXrXsXtXeXnX zweiten Tabelle sind.

    Code SQL:
    SELECT 
    monatssummen.Kal_Mon AS Kalendermonat , 
    monatssummen.Sum_Mon AS PLANzahlen,
    sapsumme0822.betrag AS ISTzahlen
    FROM monatssummen
    LEFT JOIN
    sapsumme0822
    ON
    monatssummen.Kal_Mon = sapsumme0822.KalMon

    Kalendermonat PLANzahlen ISTzahlen
    2011-10 370
    2011-11 5733.33
    2011-12 8351.18 11571.44
    2012-01 10463.13 10195.96
    2012-02 7949.15 10534.29
    2012-03 4512.78 5601.66
    2012-04 7016.22 2637.5
    2012-05 13974.66 9628.69
    2012-06 31963.04 28686.17
    2012-07 41219.79 43561.24
    2012-08 22227.42 34784.61
    2012-09 29481.06 26563.09
    2012-10 52339.53 36984.6
    2012-11 72221.33 84374.12
    2012-12 71546.76
    2013-01 66682.53
    2013-02 43505.15
    2013-03 16978.45
    2013-04 2516

    Ausgegeben sollen aber in den Spalten Kalendermonat und PLANzahlen nur Daten, welche kleiner oder gleich dem Maximalen Monat der Tabelle sapzahlen0822 sind.

    Kalendermonat PLANzahlen ISTzahlen
    2011-10 370
    2011-11 5733.33
    2011-12 8351.18 11571.44
    2012-01 10463.13 10195.96
    2012-02 7949.15 10534.29
    2012-03 4512.78 5601.66
    2012-04 7016.22 2637.5
    2012-05 13974.66 9628.69
    2012-06 31963.04 28686.17
    2012-07 41219.79 43561.24
    2012-08 22227.42 34784.61
    2012-09 29481.06 26563.09
    2012-10 52339.53 36984.6
    2012-11 72221.33 84374.12

    Ich habe schon alle möglichen mir einfallenden Kombinationen in der WHERE klausel ausprobiert. Entweder werden alle Monate der einen Tabelle mit allen Monaten der andren Tabelle verglichen, oder aber es werden lediglich die Monate "2011-11" bis "2012-11" ausgegeben.
    Umrechnung der Monate auf Julianday hat mir auch nichts gebracht.

    Kann mir hier jemand weiterhelfen?

    Vielen Dank
    Wolf-Tilmann
    Geändert von Wolf-Tilmann (18.12.2012 um 11:53 Uhr) Grund: Fehler erste statt zweite Tabelle
    Aktuell "unerlaubt" verwendete Datenbank: SQLite - Da kommt mein Admin nicht dahinter :-)

    Ach ja:
    Daten lassen sich am Besten mit der Keule bearbeiten.

  2. #2
    Forenheld
    Registriert seit
    26.02.2003
    Ort
    Sachsen-Anhalt
    Beiträge
    5.126

    Standard

    Hallo,

    wie definierst du bzw. was verstehst du unter "Maximalwert der ersten Tabelle"?

    Gruß Falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

  3. #3
    Stammgast
    Registriert seit
    26.02.2003
    Beiträge
    2.023

    Standard

    Die grundlegende Frage von Falk ist zunächst zu klären. Anschließend kannst du die ON-Klausel entsprechend anpassen. Dort kann nicht nur auf eine Gleichheit (meistens über einen ForeignKey) geprüft werden, sondern es ist (fast) jede Bedingung zulässig, die auch in der WHERE-Klausel möglich ist, also auch AND/OR und etwas wie " <= Max()". Jürgen

  4. #4
    Aufsteiger
    Registriert seit
    21.09.2010
    Beiträge
    74

    Standard

    Der ALL Operator dürfte auch deinen Wünschen entsprechen

    http://www.oracle-base.com/articles/...in-sql.php#all

  5. #5
    Zaungast
    Registriert seit
    14.10.2012
    Beiträge
    24

    Standard

    Zuerst einmal, Ihr habe mich bei einem flüchtigkeitsfehler erwischt.
    Es muss "zweite Tabelle" heißen.
    Als Maximalwert meine ich den im Laufe alle Eintragungen höchsten Monat in der Tabelle "sapzahlen0822".

    Hintergrund

    In der Tabelle monatssummen, welche eigentlich ein View ist, habe ich lediglich zwei Spalten
    1. Kal_Mon: hier werden mittels GROUP BY die Kalendermonate aller meiner Planungen zusammengefasst
    2. Sum_Mon: hier werden die TOTAL-werte je Kalendermonat summiert

    Die Tabelle sapsumme0822 enthält auch lediglich zwei Spalten
    1. KalMon: hier werden mittels GROUP BY die Kalendermonate aller IST-Zahlungen zusammengefasst
    2. betrag: hier werden die TOTAL-werte je Kalendermonat summiert

    In der Abfrage um welche es mir hier geht, möchte ich die PLAN- den IST-Zahlen gegenüberstellen.
    Da aber die IST-Zahlen gelegentlich erst Monate später ermittelt weden können und damit in der Tabelle sapsumme0822 stehen, benötige alle PLAN-Zahlen aus der Zeit vor/einschließlich der aktuellsten Zahlen aus sapsumme0822.
    Das ist vielleicht etwas unverständlich, deshalb habe ich oben die zwei Tabellen eingegeben.

    Wolf-Tilmann
    Aktuell "unerlaubt" verwendete Datenbank: SQLite - Da kommt mein Admin nicht dahinter :-)

    Ach ja:
    Daten lassen sich am Besten mit der Keule bearbeiten.

  6. #6
    Aufsteiger
    Registriert seit
    21.09.2010
    Beiträge
    74

    Standard

    Hallo,
    ich verstehe leider noch nicht ganz die Bedingung.

    Also in der Tabelle/View "monatssummen" gibt es zwei Spalten. Einmal der Kalendermonat und dazu die geplanten Zahlen.

    In der Tabelle "sapsumme0822" gibt es ebenfalls die Spalte Kalendermonat und dazu (falls vorhanden) die IST-Summe, also wie viel Geld oder Ähnliches wirklich verwendet wurde.

    Was genau möchtest du nun ermitteln?

    Vielleicht stehe ich auch nur auf dem Schlauch und jemand anderes hat es schon verstanden :P

    MfG


    Edit:

    Hier ein paar Testdaten:

    Code SQL:
    CREATE TABLE monatssummen 
    (
      Kal_Mon     VARCHAR2(7),
      Sum_Mon     NUMBER
    );
     
    CREATE TABLE sapsumme0822 
    (
      Kal_Mon     VARCHAR2(7),
      betrag      NUMBER
    );
     
    INSERT INTO monatssummen VALUES ('2011-10', 370);
    INSERT INTO monatssummen VALUES ('2011-11', 5733.33);
    INSERT INTO monatssummen VALUES ('2011-12', 8351.18);
    INSERT INTO monatssummen VALUES ('2012-01', 10463.13);
    INSERT INTO monatssummen VALUES ('2012-02', 7949.15);
    INSERT INTO monatssummen VALUES ('2012-03', 4512.78);
    INSERT INTO monatssummen VALUES ('2012-04', 7016.22);
     
    INSERT INTO sapsumme0822 VALUES ('2011-10', NULL);
    INSERT INTO sapsumme0822 VALUES ('2011-11', NULL);
    INSERT INTO sapsumme0822 VALUES ('2011-12', 11571.44);
    INSERT INTO sapsumme0822 VALUES ('2012-01', 10195.96);
    INSERT INTO sapsumme0822 VALUES ('2012-02', 10534.29);
    INSERT INTO sapsumme0822 VALUES ('2012-03', 5601.66);
    INSERT INTO sapsumme0822 VALUES ('2012-04', 2637.5);
    Geändert von FlexGer (18.12.2012 um 14:40 Uhr)

  7. #7
    Forenheld
    Registriert seit
    26.02.2003
    Ort
    Sachsen-Anhalt
    Beiträge
    5.126

    Standard

    Zitat Zitat von FlexGer Beitrag anzeigen
    ...ich verstehe leider noch nicht ganz die Bedingung.
    Du bist nicht alleine, ich verstehs auch nicht ...
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

  8. #8
    Zaungast
    Registriert seit
    14.10.2012
    Beiträge
    24

    Standard

    Hallo,

    PLANzahlen werden für einen Monat geplant, können aber u.U. in den folgenden Monaten erst als ISTzahlen erscheinen.
    Damit können ISTzahlen nur für die vorangegangen PLANmonate oder dem aktuellen PLANmonat stehen.

    Dadurch kann ich immer vergleichen, wann tatsächlich die geplanten Ausgaben angefallen sind.

    Nehmen wir einmal als Beispiel die Monate '2011-10', '2011-11' und '2011-12'
    Für die Monate 10 und 11 sind Ausgaben geplant gewesen.
    Wegen verschiedener Gründe wurden aber die Ausgaben erst in 12 abgearbeitet.

    Geplant '2011-10' bis '2011-12' waren 14.545,51 Euro
    Tatsächlich wurden lediglich 11.571,44 ausgegeben.

    Zum letzten Monat der ISTzahlen addiere ich alle ISTzahlen seit Anbeginn zusammen,
    Dem gegenüber stelle ich die PLANzahlen seit Anbeginn bis einschließlich des letzten Monats der ISTzahlen.
    (UNION)

    Dadurch sehe ich wie sich die ISTzahlen zu den PLANzahlen entwickeln sowie es zum aktuellen Sachstand der ermittelten ISTzahlen über das gesamte Projekt hinaus verhält.

    Was das ganze total verfälscht sind die PLANzahlen in die Zukunft aus Sicht der letzten ISTzahlen. In meinem Beispiel die Monate '2012-12' bis einschließlich '2013-04'. Diese dürfen nicht erscheinen, da diesen keine ISTzahlen gegenübergestellt weden können.

    Ich weiß, etwas verquert, aber es ist leider so.

    Wolf-Tilmann
    Aktuell "unerlaubt" verwendete Datenbank: SQLite - Da kommt mein Admin nicht dahinter :-)

    Ach ja:
    Daten lassen sich am Besten mit der Keule bearbeiten.

  9. #9
    Aufsteiger
    Registriert seit
    21.09.2010
    Beiträge
    74

    Standard

    So?

    Code SQL:
    SELECT  monat.Kal_Mon AS Kalendermonat , 
            monat.Sum_Mon AS PLANzahlen,
            sap.betrag AS ISTzahlen
    FROM    monatssummen monat
    LEFT JOIN
            sapsumme0822 sap
    ON
            (monat.Kal_Mon = sap.Kal_Mon)
    WHERE   sap.betrag IS NOT NULL;

  10. #10
    Forenheld
    Registriert seit
    26.02.2003
    Ort
    Sachsen-Anhalt
    Beiträge
    5.126

    Standard

    Zitat Zitat von Wolf-Tilmann Beitrag anzeigen
    ...Was das ganze total verfälscht sind die PLANzahlen in die Zukunft aus Sicht der letzten ISTzahlen. In meinem Beispiel die Monate '2012-12' bis einschließlich '2013-04'. Diese dürfen nicht erscheinen, da diesen keine ISTzahlen gegenübergestellt weden können.
    Warum verwendest du dann nicht einfach einen INNER JOIN statt einem LEFT JOIN? Damit würdest du nur die Planzahlen bekommen, zu denen es auch ein IST gibt.

    Gruß Falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

 

 
Seite 1 von 2 1 2 LetzteLetzte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •