Oracle select sum() join select sum()

Fant

Bekanntes Mitglied
Hallo zusammen..

auch wenn es meiner Meinung nach eigentlich nicht hier ins Forum gehört, aber vielleicht weiß ja doch jemand rat. Meine Recherchen im Internet waren leider nicht erfolgreich.

Ich habe zwei Abfragen, die jede für sich genommen auch funktionieren:

SQL:
select sum(...) as SUM_A from TABLE_A

select sum(...) as SUM_B from TABLE_B

ich würde aber gerne beide Abfragen in ein Query packen und am Ende einfach nur eine Zeile erhalten, in der die entsprechenden Zahlen aus den vorherigen Abfragen auftauchen, also so etwas

Code:
 # |  SUM_A  | SUM_B
-----------------------
 1 |  1313   |   345

Wenn ich zwischen beide Abfragen einfach ein JOIN setze, dann bekomme ich folgende Fehlermeldung
Code:
Error code 903, SQL state 42000: ORA-00903: invalid table name

Weiß jemand, wie ich das miteinander verknüfen kann?

Gruß Fant
 
Hi, danke für die Antwort. Das liefert mir aber bei allen Klammerungsmöglichkeiten, die mir eingefallen sind, den gleichen Fehler. Das "," ist ja auch nur ein spezieller join .... irgendwie muss das doch gehen? ::rtfm:

Gruß Fant
 
Habe nun einen Workaround für mich gefunden. An einer sauberen Lösung bin ich aber nach wie vor interessiert, wenn jemand eine hat...

SQL:
select sum(...) as A, 0 as INDEXCOL from TABLE_A
union
select sum(...) as A, 1 as INDEXCOL from TABLE_B

liefert dann
Code:
 # |   A    | INDEXCOL
-----------------------
 1 |  1313  |   0
 2 |   345  |   1

Fehlende Spalten füll ich einfach mit Nullen auf.

Gruß Fant
 
Hi, danke für die Antwort. Das liefert mir aber bei allen Klammerungsmöglichkeiten, die mir eingefallen sind, den gleichen Fehler. Das "," ist ja auch nur ein spezieller join .... irgendwie muss das doch gehen? ::rtfm:

Gruß Fant

Ein Komma ist kein Join! Wenn es so wie ich schrieb nicht funktioniert, dann machst du was anderes falsch.
 
SQL:
SELECT a.cnt as CNT_A
         , b.cnt as CNT_B
  from (select count(*) AS cnt FROM TAB_A) a
     , (select count(*) AS cnt FROM TAB_B) b

Edit: Mom, das war für Sybase...

Edit2: Oracle gehts auch...
 
Zuletzt bearbeitet:
Dann muss vielleicht doch ein etwas umfangreicheres gekürztes Beispiel her, denn ich bekomm es leider immer noch nicht hin...


Meine einzelnen Abfragen haben etwas weiter ausgeführt folgende Form:

SQL:
select
    sum(-zähle was-) as SUM_A
    sum(-noch was-) as SUM_B
from (
    select distinct COL1, COL2, COL3
    from TABLE_A ta left join TABLE_B tb on ta.COL2 = tb.COL2
    where -bedingung-
)

SQL:
select
    sum(-zähle was-) as SUM_C
    sum(-noch was-) as SUM_D
    sum(-noch was-) as SUM_E
from (
    select distinct COL4, COL5, COL6, COL7, ...
    from TABLE_C tc left join TABLE_D td on tc.COL4 = td.COL4
    where -bedingung-
)

SQL:
(...)

Die krieg ich einfach nicht unter einen Hut, egal was ich anstelle...

[EDIT]Der letzte Post hat sich eingeschlichen, während ich meinen Beitrag verfasst habe ... werde das gleich mal versuchen...[/EDIT]
 
Zuletzt bearbeitet:
SQL:
SELECT (SELECT count(*) AS cnt FROM TAB_A) AS CNT_A
     , (SELECT count(*) AS cnt FROM TAB_B) AS CNT_B
  FROM dual

Geht bei Oracle auch... Nachteil, nur ein Feld pro Abfrage
 
SQL:
SELECT (SELECT count(*) AS cnt FROM TAB_A) AS CNT_A
     , (SELECT count(*) AS cnt FROM TAB_B) AS CNT_B
  FROM dual

Geht bei Oracle auch... Nachteil, nur ein Feld pro Abfrage

Das "FROM dual" darfst du auch weg lassen, wird ja eh nicht verwendet, womit wir wieder bei meinem Beispiel von oben wären.
 

Zurück
Oben