Oracle Problem mit group by...

Gossi

Bekanntes Mitglied
Moinsen, ich hab da mal nen kleines Problem mit einem Statement:

Code:
select sum(Spalte1) from tabelle1 where Spalte2 in (select T2Spalte1 from tabelle2  where T2Spalte2 = 0)
and woche in (1,2,3) group by woche order by woche

So, nu haben wir aber nur Datensätze für Woche 1, wie bekomme ich es nun hin, dass mir das Statement trotzdem 3 Rows ausgibt, bzw. ist das überhaupt möglich?

Danke im Vorraus
Gossi
 
S

SlaterB

Gast
@Tomate_Salat
was soll man an einer DB-Abfrage schon testen können,
da müsstest du dir irgendeine Tabelle anlegen, Spalte1 mit beliebigen Zahlen, Spalte Woche immer mit Wert 1..

@Gossi
> wie bekomme ich es nun hin, dass mir das Statement trotzdem 3 Rows ausgibt

welche Werte sollen die anderen denn haben, einfach nur mit 0 auffüllen oder vorne anstellen?
nach Woche zu sortieren aber die Woche nicht mit aufzunehmen, wie kann das funktionieren,
ist sichergestellt dass wenn Daten da sind, dann immer auf bestimmte Weise so dass man sich den Rest denken kann?

'den Rest denken' wäre in Java wohl besser aufgehoben..,
für die DB fällt mir nur eine zweite Referenz-Tabelle ein, damit Joinen
Einführung in SQL: OUTER JOIN ? Wikibooks, Sammlung freier Lehr-, Sach- und Fachbücher
 

Gossi

Bekanntes Mitglied
welche Werte sollen die anderen denn haben, einfach nur mit 0 auffüllen oder vorne anstellen?
nach Woche zu sortieren aber die Woche nicht mit aufzunehmen, wie kann das funktionieren,
ist sichergestellt dass wenn Daten da sind, dann immer auf bestimmte Weise so dass man sich den Rest denken kann?

Das ganze Programm ist so aufgebaut, dass es lediglich die Summe der Werte einer Spalte nach Woche gruppiert ausgibt, dass Problem ist jedoch, dass bei Woche 1 natürlich noch keine Daten für Woche 2 und 3 Vorhanden sind, diese müssten dann 0 sein.

Ausgabe momentan:
9605


Wie es sein müsste (in Woche 1)
9605
0
0
 

Evil-Devil

Top Contributor
Was noch nicht existiert erstellt dir SQL auch nicht. Also entweder mit Blinddaten anreichern oder im Programm die fehlenden Zeilen ergänzen.
 
T

Tomate_Salat

Gast
Könnte mit Stored Procedures gehen. Hab aber selber noch nicht damit gearbeitet.
 
S

SlaterB

Gast
> entweder mit Blinddaten anreichern

das ist wohl die Frage, um mal für Gossi weiterzuarbeiten,
du meinst damit Dummy-Einträge in der Tabelle mit Wert 0 in Spalte1?
klingt schlau, falls nie etwa Anzahl wichtig ist
 

Gossi

Bekanntes Mitglied
Genau da haben wir dann aber wieder das Problem, dass keine Zeilen von mir (meinem Programm) in die Tabelle eingefügt werden dürfen.

Bleibt mir wohl nix anderes übrig als den Kram in Java zu machen :(
 

Evil-Devil

Top Contributor
Du könntest Werte über tmp/anonyme Tabellen erzeugen, aber das ist doch sehr unsauber. Besser wäre da schon der Weg über die Anwendung. Wenn die Anwendung so oder so immer 3 Wochen erwartet, dann müsstest doch lediglich das Feld für die jeweilige Woche befüllen. Oder wird sie später auch andere Bereiche/Größen abfragen?
 
T

Tomate_Salat

Gast
Darfst du Änderungen an der Datenbank vornehmen oder hast du dazu keine Berechtigung? Wenn du SP einrichten dürftest, kannst du dir das ja mal anschauen. Da kannst du mit Schleifen arbeiten (was dir hier ja fehlt) und dein Eregebnis zusammenbauen.
 

Gossi

Bekanntes Mitglied
Auf der Datenbank hab ich Adminrechte, aber ich darf trotzdem mit der Anwendung nix ändern.

Und mal ne ganz blöde Frage, was meinst du mit SP? Stored Procedure...
 

mla.rue

Bekanntes Mitglied
Habe ich was verpasst oder entgeht mir hier etwas? Der TE hat die Ausgabe:
9605

Möchte aber
9605
0
0

Wenn man sich die SQL Abfrage anschaut:

select sum(Spalte1) from tabelle1 where Spalte2 in (select T2Spalte1 from tabelle2 where T2Spalte2 = 0)
and woche in (1,2,3)
group by woche order by woche

? bei dieser SQL Query wird nur eine Spalte einer Tabelle ausgegeben, die am Ende gruppiert wird, und somit nur eine einzige Ausgabe liefert. Also: 9605

Wenn du 9605, 0,0 haben willst, müsste es etwa so aussehen (sprich du musst ein SELECT auf alle Spalten ausführen, die wirklich mit irgendeinem Wert angezeigt werden sollen. Haben die Tabellen 'noch' keine Werte, kommt da halt eine 0 raus):

SQL:
SELECT SUM(tabelle1.Spalte1), SUM(tabelle2.Spalte1), SUM(tabelle3.Spalte1 FROM tabelle1, tabelle2, tabelle3 GROUP BY woche ORDER BY woche

Könnte bei GROUP/ORDER tückisch werden, unter Umständen musst alles richtig angeben also GROUP BY tabelle1.woche tabelle2.woche...
 

Gossi

Bekanntes Mitglied
bei dieser SQL Query wird nur eine Spalte einer Tabelle ausgegeben, die am Ende gruppiert wird, und somit nur eine einzige Ausgabe liefert. Also: 9605

Nicht ganz richtig, stellen wir uns vor:

Spalte1|Woche
100|1
200|2
300|3
400|4
500|1
600|3
700|2

Und mann führt meine Abfrage durch, bekommt man:
600
900
900
400
 

mla.rue

Bekanntes Mitglied
Öhm daher auch "habe ich was verpasst" geschrieben :oops: Erst Mi und schon so kaputt ...

Was meinst du mit keine Datensätze außer Woche1... nichts wie absolut nichts, oder doch schon Woche 2,3 aber 0 in Spalte1?

SQL:
INSERT INTO tabelle1 VALUES (100,1);
INSERT INTO tabelle1 VALUES (0,2);
INSERT INTO tabelle1 VALUES (0,3);
INSERT INTO tabelle1 VALUES (500,1);
INSERT INTO tabelle1 VALUES (0,3);
INSERT INTO tabelle1 VALUES (0,2);

/* oder */

INSERT INTO tabelle1 VALUES (100,1);
INSERT INTO tabelle1 VALUES (500,1);

Fall 1 geht, da würde ich deine WHERE Bedingung überprüfen.
Fall 2 produziert natürlich nur 1 Zeile.
 

Gossi

Bekanntes Mitglied
Leider Fall2, habs nun schnell und dreckig gelöst

Erst nen Statement, der mir die Unterschiedlichen Wochen prüft und anschließend setze ich in java die restlichen Werte einfach auf 0 und Frage row 2 und 3 im Resultset nicht mehr ab (sind ja eh nicht vorhanden xD)
 

mla.rue

Bekanntes Mitglied
Als schmutzig würde ich das jetzt aber nicht wirklich bezeichnen. Wenn, wie im Fall 2, tatsächlich keine Einträge für Wochen 2/3 existiert, liefert die SQL Query nuneinmal nur eine Ergebniszeile. Mir ist keine SQL Funktion bekannt, die "liefere 0 wenn select leer" macht. Das programmatorisch in Java zu lösen ist dann denke ich die einzige Lösung und somit nicht schmutzig.

Schmutzig wäre es, wenn du einfach einen 0,2 und 0,3 Datensatz der Tabelle hinzufügen würdest, damit die SQL Query tatsächlich was liefert.
 
Zuletzt bearbeitet:
H

HarryMac

Gast
Hi

Um Einträge für jede Woche zu erzeugen, auch wenn sie noch nicht in der Faktentabelle enthalten sind mußt du irgendwo eine Referenz aller Wochen haben und damit OUTER JOINEN:
In Oracle könnte das folgendermaßen aussehen:

with SRC as (
select 100 spalte1, 1 woche from dual union all
--select 200, 2 from dual union all
--select 300, 3 from dual union all
--select 400, 4 from dual union all
select 500, 1 from dual --union all
--select 600, 3 from dual union all
--select 700, 2 from dual
)
,REF_WOCHEN as (
select 1 woche from dual union all
select 2 from dual union all
select 3 from dual union all
select 4 from dual
)
select w.woche,COALESCE(sum(s.spalte1),0) as SUMME
from REF_WOCHEN w
LEFT OUTER JOIN
SRC s
ON s.woche = w.woche
group by w.woche


Mit den beiden WITH-Blöcken richte ich lediglich unsere Testdaten her, das eigentlich SQL sind die 6 letzten Zeilen. Die COALESCE-Funktion bedingt, daß kein NULL-Wert in die Spalte geschrieben wird, sondern ein Alternativwert - häufig z.b. "0"
Im SRC-Block hab ich nur die Einträge gelassen für Woche 1
Das Construct mit "select * from dual" ist ORACLE-Spezifisch, das wird bei einer anderen DB zu ändern sein - z.b: bei MSSQL:
select 100 as spalte1, 1 as woche union all
select 200 as spalte1, 2 as woche union all
select 300 as spalte1, 3 as woche
... usw


lg
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J SQL Problem mit Count + Group By Datenbankprogrammierung 7
J PC-Start Problem JDBC Connection Datenbankprogrammierung 10
C Problem mit Apache Poi Datenbankprogrammierung 6
N HSQLDB Problem mit Eclipselink in runnable Jar Datenbankprogrammierung 10
P GroupLayout-Problem Datenbankprogrammierung 12
F XAMPP max connections problem Datenbankprogrammierung 6
C MySQL Problem in phpMyAdmin Oberfläche Datenbankprogrammierung 5
C Problem with INSERT.............ON DUPLICATE KEY Datenbankprogrammierung 3
C Problem with insertion in database. Datenbankprogrammierung 7
F Problem mit Hibernate c3p0 Datenbankprogrammierung 2
W Problem mit Insert in zwei Tabellen Datenbankprogrammierung 8
G MySQL Problem mit MySQL verbindung Datenbankprogrammierung 8
A kleines Problem Datenbankprogrammierung 6
T Problem mit Datenbankverbindung Datenbankprogrammierung 22
V Derby/JavaDB updateRow Problem Datenbankprogrammierung 0
G MySQL Java Problem: Nullpointer Exception obwohl Daten vorhanden sind? Datenbankprogrammierung 2
Nuiton EmbeddedDriver Problem Datenbankprogrammierung 6
A MongoDB Passwort Problem Datenbankprogrammierung 0
O HSQLDB Hibernate Criteria Problem Datenbankprogrammierung 3
F MySQL JDBC Problem Datenbankprogrammierung 5
Anfänger2011 Datenbankstruktur/aufbau (theoretisches Problem) Datenbankprogrammierung 5
M Derby/JavaDB Drop Database problem Datenbankprogrammierung 3
M Derby/JavaDB NOT LIKE problem Datenbankprogrammierung 19
N HSQLDB Problem mit EntityManager Datenbankprogrammierung 7
B MySQL JPAContainer Problem Datenbankprogrammierung 4
K Eclipse Apache Derby Treiber Problem Datenbankprogrammierung 4
C Problem oder Denkfehler mit H2-Database Datenbankprogrammierung 3
E Wie kann man das Problem mit der BLOB-Spalte lösen? Datenbankprogrammierung 1
M Problem mit jcouchdb und CouchDB - UTF8 kein gültiger Zeichentyp Datenbankprogrammierung 4
T MySQL Problem mit Datenbankanbindung Datenbankprogrammierung 4
M INSERT-Problem = integrity constraint violation: foreign key no parent Datenbankprogrammierung 5
P SQL Query Problem Datenbankprogrammierung 14
A MySQL Problem bei Tabelle ausgeben Datenbankprogrammierung 3
Q MySQL JDBC-Treiber Problem Datenbankprogrammierung 2
B SQLite Problem bei Planung der Datenbank [Jeopardy] Datenbankprogrammierung 3
A Problem mit dem Import und Export von Bildern Datenbankprogrammierung 4
P Oracle Problem mit Umlauten Datenbankprogrammierung 9
A Problem mit Create-Statement Datenbankprogrammierung 9
D Problem mit COLUMN_IDENTIFIERS Datenbankprogrammierung 8
Bluedaishi MySQL Abfrage Problem :-) Datenbankprogrammierung 21
M Problem mit mehreren Datasourcen Datenbankprogrammierung 3
R Resultset.last() Problem Datenbankprogrammierung 12
M Problem GroupBy Datenbankprogrammierung 3
S CURRENT_DATE problem Datenbankprogrammierung 2
M Problem mt JPA Id-Generators Datenbankprogrammierung 18
M MySQL SQL Abfrage Problem Datenbankprogrammierung 6
R MS-SQL Express Login-Problem Datenbankprogrammierung 8
P Lazy-Fetchig und Session-Problem mit Hibernate Datenbankprogrammierung 4
N HSQLDB Problem beim Treiberladen im Jar Datenbankprogrammierung 6
M Problem beim Erstellen einer Query Datenbankprogrammierung 7
C Hibernate ManyToMany zusammengesetzter Primärschlüssel, problem. Datenbankprogrammierung 3
M Problem mit HQL Syntax Datenbankprogrammierung 5
K Db4o Delete Problem Datenbankprogrammierung 11
Mike90 Deadlock/Lock Problem Datenbankprogrammierung 4
T Access 32bit on Win7 64Bit ODBC Problem Datenbankprogrammierung 1
C unverständliches DB Problem (Es ist kein temporärer Systemtabellenbereich mit einer ausreichenden..) Datenbankprogrammierung 5
S ODBC Treiber Problem/oder unvermögen Datenbankprogrammierung 18
J Problem bei Boolean in PreparedStatement Datenbankprogrammierung 5
C MySQL Problem mit UPDATE Abfrage Datenbankprogrammierung 13
C Problem mit SQL-Abfrage Datenbankprogrammierung 5
K Problem mit Datenbankverbindung via Eclipse Datenbankprogrammierung 2
A Problem mit Eintragen von Daten in eine Datenbank mittels DAO Datenbankprogrammierung 4
S Oracle Problem mit PreparedStatement.setString(1,"str") Datenbankprogrammierung 10
B MySQL Problem mit Datenbankanbindung an MySQL Datenbankprogrammierung 2
N Problem bei Erstellung eines Index Datenbankprogrammierung 12
C Hibernate Property-Problem Datenbankprogrammierung 5
J MyBatis - Update Problem Datenbankprogrammierung 4
S JPA: Problem mit Update von Daten Datenbankprogrammierung 7
c_sidi90 Hibernate Problem Table doesnt excist Datenbankprogrammierung 8
M Problem mit JPA - OneToMany-Relation Datenbankprogrammierung 3
I Hibernate: Composite Foreign Key Problem Datenbankprogrammierung 14
S JPA OptimisticLocking Problem Datenbankprogrammierung 11
I Derby/JavaDB Problem mit Befüllung von Tabelle Datenbankprogrammierung 7
JavaKaffee Derby/JavaDB Quartz-WebAnwendung - Connection/Treiber Problem Datenbankprogrammierung 47
I Problem mit ResultSet Datenbankprogrammierung 2
L Excel in MySQL importieren Problem Datenbankprogrammierung 5
S Problem beim Anlegen einer Tabelle Datenbankprogrammierung 5
R MS Access mit Java Problem mit Update Statment Datenbankprogrammierung 13
S MySQL Problem mit SELECT bzw encoding Datenbankprogrammierung 4
T Problem beim schreiben von daten Datenbankprogrammierung 4
M MySQL getConnection - Verbindung Problem Datenbankprogrammierung 2
K Hibernate + MySQL Problem... Datenbankprogrammierung 2
I MySQL MySQL – Proxy Problem Datenbankprogrammierung 4
M Problem mit Hibernate und Named Query Datenbankprogrammierung 1
M Problem mit Hibernate und Access Datenbankprogrammierung 9
C firebird problem Datenbankprogrammierung 5
F Problem mit Datenbankabfrage Datenbankprogrammierung 7
K SQL Problem mit Date Datenbankprogrammierung 3
jeppi MySQL Design-Problem: DB-Verbindung herstellen und halten - JdbcRowSet / Idle-Timeout? Datenbankprogrammierung 9
J sql abfrage ... Problem mit Datumswert Datenbankprogrammierung 3
G MySQL Connection Problem Datenbankprogrammierung 3
O MySQL Problem mit Umlauten?! Datenbankprogrammierung 2
E Hibernate Problem bei bidirektionaler 1:n Verbindung Datenbankprogrammierung 2
D MySQL Problem beim einfügen von Double-Zahlen Datenbankprogrammierung 4
M Oracle Problem mit Resultset Datenbankprogrammierung 11
T Problem bei Zugriff auf Access Datenbank Datenbankprogrammierung 7
W jpmdbc Problem -Beispiel funktioniert nicht Datenbankprogrammierung 9
W Verständnis-Problem JPA Grundlagen Datenbankprogrammierung 5
M Problem Array in BLOB-Feld in DerbyDB zu speichern Datenbankprogrammierung 5
M JPA-Persist Problem Datenbankprogrammierung 2

Ähnliche Java Themen

Neue Themen


Oben