Tedi Geschrieben 4. Februar 2019 Teilen Geschrieben 4. Februar 2019 Hallo, Ich habe ein Phänomen was ich nicht verstehe. Aus einer DB-Tabelle selectiere ich einige Spalten unter anderem die Summe einer bestimmte Spalte. Das Ergebnis wird angezeigt. Sobald ich als where- Bedingung den Zeitraum mit where Zeit between to_date('01.2018','dd.yyyy') and to_date('12.2018','dd.yyyy') eingrenze enthält meine Summe-Spalte den Wert Null. Danke für eure mithilfe Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 Rabber Geschrieben 4. Februar 2019 Teilen Geschrieben 4. Februar 2019 Das Problem dürfte das to_date sein. dd steht für den Tag, ich vermute jedoch, Du meintest den Monat, also mm. Grundsätzlich würde ich das so aber gar nicht machen, sondern mir das Jahr aus "Zeit" auslesen und mit 2018 vergleichen. Dann brauchst Du kein between. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 Tedi Geschrieben 4. Februar 2019 Autor Teilen Geschrieben 4. Februar 2019 vor 33 Minuten schrieb Errraddicator: Das Problem dürfte das to_date sein. dd steht für den Tag, ich vermute jedoch, Du meintest den Monat, also mm. Grundsätzlich würde ich das so aber gar nicht machen, sondern mir das Jahr aus "Zeit" auslesen und mit 2018 vergleichen. Dann brauchst Du kein between. Erraddicator Danke für deine Antwort. Ich wollte gerade meinem Tippfehler im Beitrag korrigieren als ich deine Antwort gelesen habe. Nein ich habe tatsächlich die Abfrage mit 'mm' geschickt. (Ich korrigiere es sofort) Mir ist noch aufgefallen, dass egal welche where Bedingung ich einfüge ist die Spalte einfach leer bzw. Null. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 Rabber Geschrieben 4. Februar 2019 Teilen Geschrieben 4. Februar 2019 Dann brauchen wir etwas mehr Input. Das komplette SQL-Kommando, Tabellenstruktur, etc. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 Whiz-zarD Geschrieben 4. Februar 2019 Teilen Geschrieben 4. Februar 2019 (bearbeitet) vor einer Stunde schrieb Errraddicator: Grundsätzlich würde ich das so aber gar nicht machen, sondern mir das Jahr aus "Zeit" auslesen und mit 2018 vergleichen. Dann brauchst Du kein between. Nicht nur das. Wenn das gesamte Jahr genommen werden soll, ist die Where-Bedingung nicht richtig, da diese nur Datensätze zwischen 01.01.2018 und 01.12.2018 berücksichtigt. Werte vom 02.12.2018 bis 31.12.2018 werden somit nicht gelesen. Vielleicht ist das auch der Grund. Vielleicht gibt es keine Datensätze, die älter als 02.12.2018 sind. to_date() erzeugt ein Datum und wenn kein Tag angegeben wird, dann wird der erste Tag des Monats genommen. Bearbeitet 4. Februar 2019 von Whiz-zarD Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 Tedi Geschrieben 4. Februar 2019 Autor Teilen Geschrieben 4. Februar 2019 (bearbeitet) Select id, kategorie, zeit, sum(einzahlung, decode(plm, ' + ' decode ( freq, null, 1, freq ) * + 1, ' - ' decode ( freq, null, freq ) * - 1 sokat) ) from Archive Where zeit between to_date ( '01.2018', ' mm.yyyy') and to_date ( '12.2018', ' mm.yyyy') Group by id, kategorie, zeit; Die Tabelle Archive hat dann die Spalten: Id, kategorie, zeit, freq, einzahlung, plm Bearbeitet 4. Februar 2019 von Tedi Fehler Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 MartinSt Geschrieben 4. Februar 2019 Teilen Geschrieben 4. Februar 2019 PostgreSQL? Was liefert die Abfrage ohne Aggregation? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 Tedi Geschrieben 4. Februar 2019 Autor Teilen Geschrieben 4. Februar 2019 vor 1 Minute schrieb Whiz-zarD: Nicht nur das. Wenn das gesamte Jahr genommen werden soll, ist die Where-Bedingung nicht richtig, da diese nur zwischen 01.01.2018 und 01.12.2018 berücksichtigt. Werte vom 02.12.2018 bis 31.12.2018 werden somit nicht gelesen. Vielleicht ist das auch der Grund. Vielleicht gibt es keine Datensätze, die älter als 02.12.2018 sind. Danke Whiz-zart, 1. Was meinst du genau mit 'das Jahr aus Zeit auslesen?' 2. Ich habe auch schon mit dem ganzen Jahr probiert mit dem selben Ergebnis Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 Tedi Geschrieben 4. Februar 2019 Autor Teilen Geschrieben 4. Februar 2019 vor 1 Minute schrieb MartinSt: PostgreSQL? Was liefert die Abfrage ohne Aggregation? SQL. Ohne Aggregation habe ich ganz normal die Werten, die in der Tabelle gespeichert sind Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 MartinSt Geschrieben 4. Februar 2019 Teilen Geschrieben 4. Februar 2019 Welches DB System? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 Tedi Geschrieben 4. Februar 2019 Autor Teilen Geschrieben 4. Februar 2019 vor 42 Minuten schrieb Errraddicator: Dann brauchen wir etwas mehr Input. Das komplette SQL-Kommando, Tabellenstruktur, etc. Select id, kategorie, zeit, sum(einzahlung, decode(plm, ' + ' decode ( freq, null, 1, freq ) * + 1, ' - ' decode ( freq, null, freq ) * - 1 sokat) ) from Archive Where zeit between to_date ( '01.2018', ' mm.yyyy') and to_date ( '12.2018', ' mm.yyyy') Group by id, kategorie, zeit; Die Tabelle Archive hat dann die Spalten: Id, kategorie, zeit, freq, einzahlung, plm Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 Tedi Geschrieben 4. Februar 2019 Autor Teilen Geschrieben 4. Februar 2019 vor 1 Minute schrieb MartinSt: Welches DB System? Oracle Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 Whiz-zarD Geschrieben 4. Februar 2019 Teilen Geschrieben 4. Februar 2019 vor 8 Minuten schrieb Tedi: 1. Was meinst du genau mit 'das Jahr aus Zeit auslesen?' Wenn du Oracle verwendest, kannst du die extract()-Funktion benutzen, um das Jahr aus einem Datum zu extrahieren. https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions050.htm Dann lautet die Where-Klausel: WHERE EXTRACT(YEAR FROM ZEIT) = 2018 Wie ich schon sagte, deine Where-Klausel ist nicht korrekt, wenn sie über das gesamte Jahr gesehen soll. Hast du überhaupt schon mal die Datensätze angeschaut, ob du überhaupt Datensätze vom 01.01.2018 bis 01.12.2018 hast? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 Tedi Geschrieben 4. Februar 2019 Autor Teilen Geschrieben 4. Februar 2019 vor 11 Minuten schrieb Whiz-zarD: Wenn du Oracle verwendest, kannst du die extract()-Funktion benutzen, um das Jahr aus einem Datum zu extrahieren. https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions050.htm Dann lautet die Where-Klausel: WHERE EXTRACT(YEAR FROM ZEIT) = 2018 Wie ich schon sagte, deine Where-Klausel ist nicht korrekt, wenn sie über das gesamte Jahr gesehen soll. Hast du überhaupt schon mal die Datensätze angeschaut, ob du überhaupt Datensätze vom 01.01.2018 bis 01.12.2018 hast? Danke. Ich habe die Abfrage mit EXTRACT gemacht. Die aggregierte Spalte ist immer noch null. Ja ich habe mir die DS. vom Jahr 2018 angeschaut. Und die gibt es Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 Whiz-zarD Geschrieben 4. Februar 2019 Teilen Geschrieben 4. Februar 2019 vor 4 Minuten schrieb Tedi: Die aggregierte Spalte ist immer noch null. Was meinst du mit "aggregierte Spalte"? Einzelne Spalten aggregieren kannst du nicht. Mir ist auch nicht klar, was du mit dem Decode() erreichen möchtest. Für mich sieht auch die Syntax komplett falsch aus. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 Tedi Geschrieben 4. Februar 2019 Autor Teilen Geschrieben 4. Februar 2019 vor 6 Minuten schrieb Whiz-zarD: Was meinst du mit "aggregierte Spalte"? Einzelne Spalten aggregieren kannst du nicht. Mir ist auch nicht klar, was du mit dem Decode() erreichen möchtest. Für mich sieht auch die Syntax komplett falsch aus. Die Spalte 'Sokat'. Ich multipliziere 'Einzahlung' mit decode ( plm. . ) danach trage ich die Summe in sokat keksnase reagierte darauf 1 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 JimTheLion Geschrieben 4. Februar 2019 Teilen Geschrieben 4. Februar 2019 Wir können ja noch einen Schritt weiter gehen. Kannst du ein paar Beispieldaten und das entsprechende erwartete Ergebnis posten? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 Whiz-zarD Geschrieben 4. Februar 2019 Teilen Geschrieben 4. Februar 2019 vor 4 Minuten schrieb Tedi: Die Spalte 'Sokat'. Ich multipliziere 'Einzahlung' mit decode ( plm. . ) danach trage ich die Summe in sokat Kannst du mal bitte das richtige Statement hier reinschreiben und nicht so ein Statement, was voller Syntaxfehler ist. Ich werde daraus einfach nicht schlau. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 pr0gg3r Geschrieben 4. Februar 2019 Teilen Geschrieben 4. Februar 2019 vor einer Stunde schrieb Tedi: Select id, kategorie, zeit, sum(einzahlung, decode(plm, ' + ' decode ( freq, null, 1, freq ) * + 1, ' - ' decode ( freq, null, freq ) * - 1 sokat) ) from Archive Where zeit between to_date ( '01.2018', ' mm.yyyy') and to_date ( '12.2018', ' mm.yyyy') Group by id, kategorie, zeit; Warum sind da Leerzeichen bei '_mm.yyyy'? Und was für ein Datentyp ist "zeit" und was für Inhalte hast du da? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 Tedi Geschrieben 4. Februar 2019 Autor Teilen Geschrieben 4. Februar 2019 An Alle nochmal einen dicken DANKE. Es tut mir leid dass ich euch unnötig aufgehalten habe. Nach genauerem Hinschauen habe ich festgestellt, dass die benötigten Daten ab dem jahr 2018 in einer anderen Spalte hingeschrieben werden. Warum auch immer. -( Sorry. arlegermi reagierte darauf 1 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Frage
Tedi
Hallo,
Ich habe ein Phänomen was ich nicht verstehe.
Aus einer DB-Tabelle selectiere ich einige Spalten unter anderem die Summe einer bestimmte Spalte. Das Ergebnis wird angezeigt.
Sobald ich als where- Bedingung den Zeitraum mit
eingrenze enthält meine Summe-Spalte den Wert Null.
Danke für eure mithilfe
Link zu diesem Kommentar
Auf anderen Seiten teilen
19 Antworten auf diese Frage
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.