![]() |
Datenbank: oracle • Version: 9 • Zugriff über: egal
SQL KnowHow fehlt
Hallo zusammen,
ich muß aus einer Ereignis-Tabelle zwei Zahlen generieren, die Anzahl jedes Ergeignisses total und die Anzahl in 2010. folgende Möglichkeit habe ich ausprobiert
SQL-Code:
select count(erg1.Ergdatid) Z2010,count(Ergdate.Ergdatid) Ztotal
from Ergname ,Ergdate ,Ergdate erg1 where Ergname.ErgNid=Ergdate.ErgNid(+) and Ergname.ErgNid=Erg1.ErgNid(+) and Erg1.ErgDat>to_date('20091231','YYYYMMDD')
SQL-Code:
in beiden Fällen scheint die Abfrage in einer Endlosschleife zu versinken,
select count(erg1.Ergdatid) Z2010,count(Ergdate.Ergdatid) Ztotal
from Ergname ,Ergdate ,(select ergdatid,Ergdatid from Ergdate where Ergdate.ErgDat>to_date('20091231','YYYYMMDD') erg1 where Ergname.ErgNid=Ergdate.ErgNid(+) and Ergname.ErgNid=Erg1.ErgNid(+) ich habe mir jetzt mit einer Union-Abfrage beholfen, aber zufriedenstellend ist das nicht. Habt Ihr eine Idee wie ich es richtig machen könnte? Gruß K-H |
AW: SQL KnowHow fehlt
Also wenn ich Dich richtig verstehe, dann kann das mit einer Abfrage nicht gehen:
z.B. Alle Ereignisse = 100 Stück alle Ereignisse in 2010 = 10 Stück Wenn es nun mit einen Ruck gehen sollte: dann müßte die where-Bedingung für den ersten Teil 100 Treffer liefern (damit auch count), dürfte aber gleichzeitig für den zweiten Teil nur 10 Treffer liefern. Das kann nicht gehen. Deine Outer Joins bewirken nur, daß wohl große Datenmengen generiert werden und so ziemlich kein Index greifen dürfte. Was spricht gegen zwei einzelne Selects? Grüße, Uli |
AW: SQL KnowHow fehlt
Ich kenn mich mit den Möglichjkeiten in Oracel nicht aus und bin nicht sicher ob ich Dich richtig verstanden habe, meinst Du so etwas?
SQL-Code:
Select SUM(Case when Per=9 then 1 else 0 end) as SummeMonat9,Count(*) from [dbo].[V_KBK]
Where Jahr=2007 |
AW: SQL KnowHow fehlt
@Bummi Nein, das ist es nicht, da in Deiner Lösung nur das Jahr 2007 berücksichtigt wird, ich aber etwas in der Art von "im Jahr 2007 von allen"
@ULIK Warum sollte es nicht gehen? Die Abfrage baut ja auf 3 Tabellen auf, einmal die Jahreswerte, dann alle Werte und letztendlich die Namen und wenn es keinen Jahreswert gibt dann ist count halt 0. Mit zwei selects erhalte ich zunächst zwei Ergebniszeilen, Du glaubst doch nicht, daß damit meine Vorgesetzten zufrieden sind (ich bin doch nicht SAP) Gruß K-H |
AW: SQL KnowHow fehlt
Zitat:
|
AW: SQL KnowHow fehlt
Zitat:
Gruß K-H |
AW: SQL KnowHow fehlt
Was mir noch einfiele (keine Ahnung, ob das funktioniert):
SQL-Code:
SELECT
A.Summe, B.Summe FROM (SELECT COUNT(*) AS Summe FROM ... WHERE ...) A, (SELECT COUNT(*) AS Summe FROM ... WHERE ...) B |
AW: SQL KnowHow fehlt
[QUOTE=p80286;1043363]
Zitat:
SQL-Code:
Mal ganz davon abgesehen davon, dass ich gar nicht verstehe, warum der join zwischen ErgName und ErgDate überhaupt gemacht wird... du könntest ja auch gleich die IDs in ErgDate zählen.
select
a.cnt as Anzahl, b.cnt as Anzahl2010 From (select COUNT(*) as cnt from ErgName n inner join ErgDate d on n.ErgID = d.ErgID) a cross join (select COUNT(*) as cnt from ErgName n inner join ErgDate d on n.ErgID = d.ErgID where YEAR(d.ErgDate) = 2010) b Evtl ginge es auch so:
SQL-Code:
//Edit:
select
SUM(Anzahl) as Anzahl, SUM(Anzahl_2010) as Anzahl_2010 From (select YEAR(ErgDat) as Jahr, COUNT(ErgID) as Anzahl, case when YEAR(Ergdate) = 2010 then COUNT(ErgID) else 0 as Anzahl_2010 From ErgDate group by YEAR(ErgDat), COUNT(ErgID)) a Zitat:
|
AW: SQL KnowHow fehlt
Hupsa, ich bin das neue Forum wohl noch nicht ganz gewöhnt... man sollte schon auch auf Bearbeiten drücken, wenn man editieren will, statt zu zitieren :mrgreen:
|
AW: SQL KnowHow fehlt
Vielen Dank!
Jetzt ist das dabei heraus gekommen (da muß ich aus null noch 0 machen), ist aber eine Zeile mit zwei "Zählspalten"
SQL-Code:
und "Entschuldigung", die Werte, die aus der 1. Tabelle (namen) stammen hatte ich unterschlagen, weil sie nichts mit dem Problem zu tun hatten.
select tab1.wert1,tab1.wert2....,z2010,ztotal
from tab1 ,(select tab2.id1, count(ide) ztotal from tab2 .....) tbs1 ,(select tab2.id1, count(ide) z2010 from tab2 where datum>to_date('20091231','YYYYMMDD').....) tbs2 where tab1.id2=tbs1.id1(+) and tab1.id2=tbs2.id1(+) Vielen Dank nochmal K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz