Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Probleme mit sum function in sql-Statement (https://www.delphipraxis.net/74894-probleme-mit-sum-function-sql-statement.html)

barnti 10. Aug 2006 11:47

Datenbank: Oracle • Version: 9 • Zugriff über: Hibernate

Probleme mit sum function in sql-Statement
 
Hallo,

ich habe mal wieder Probleme beim Verständnis einer Datenbankabfrage:

Code:
select
   persacct.code,
   emppersacct.nomDate,
   emppersacct.updTs,
   tcslogin.firstName,
   tcslogin.lastName,
   emppersacct.mi,
   sum(emppersacct.mi)
   
from
   EmpPersAcct emppersacct
   left join emppersacct.tcsLogin tcslogin
   inner join emppersacct.persAcct persacct
   
where
   persacct.code='URLAUB'
   and
   emppersacct.emp.empSk=-979941237706
Frage ich die Summe der Stunden emppersacct.mi mit ab, so bekomme ich eine Fehlermeldung "SQL-Grammar-Exception". Frage ich hingegen nur die Summe ab oder nur die einzelnen Spalten ohne Summe, so funktioniert das Statement.

Ich verstehe nicht warum ich an die normale Tablle mit den aufgeführten Spalten nicht eine weitere hinzufügen kann, in der jeweils die Summenstunden stehen? Kann mich jemand aufklären? Was ist das Problem?

mkinzler 10. Aug 2006 11:51

Re: Probleme mit sum function in sql-Statement
 
von welchem Typ ist emppersacct.mi ?

barnti 10. Aug 2006 11:53

Re: Probleme mit sum function in sql-Statement
 
Hi,
Zitat:

Zitat von mkinzler
von welchem Typ ist emppersacct.mi ?

BigDecimal

mkinzler 10. Aug 2006 12:08

Re: Probleme mit sum function in sql-Statement
 
Die art der Fehlermeldung irretiert mich etwas. das eine kommt beim genaueren Hinsehen nicht mehr:

da Sum eine Aggregat-Funktion ist bezieht sie sich immer auf eine Gruppe (ohne Gruppierung = all DS). man kann also immer entweder die Einzelwerte oder die Summe erhalten.

polondo 10. Aug 2006 12:15

Re: Probleme mit sum function in sql-Statement
 
hi,

du solltest bei dieser Abfrage ein GROUP BY verwenden.

Dies könnte z.b. so aussehen

SQL-Code:
select
   persacct.code,
   emppersacct.nomDate,
   emppersacct.updTs,
   tcslogin.firstName,
   tcslogin.lastName,
   emppersacct.mi,
   sum(emppersacct.mi) as summe
   
from
   EmpPersAcct emppersacct
   left join emppersacct.tcsLogin tcslogin
   inner join emppersacct.persAcct persacct
   
where
   persacct.code='URLAUB'
   and
   emppersacct.emp.empSk=-979941237706

GROUP BY
   persacct.code
versuchs einfach mal. ciao ;O) R.

barnti 10. Aug 2006 12:17

Re: Probleme mit sum function in sql-Statement
 
Hi mkinzler,

das heißt ich muss eine Gruppierung bilden, um beides zu erhalten?
Code:
select
   persacct.code,
   emppersacct.nomDate,
   emppersacct.updTs,
   tcslogin.firstName,
   tcslogin.lastName,
   emppersacct.mi,
   sum(emppersacct.mi)
   
from
   EmpPersAcct emppersacct
   left join emppersacct.tcsLogin tcslogin
   inner join emppersacct.persAcct persacct
   
where
   persacct.code='URLAUB'
   and
   emppersacct.emp.empSk=-979941237706
   
group by
   persacct.code,
   emppersacct.nomDate,
   emppersacct.updTs,
   tcslogin.firstName,
   tcslogin.lastName,
   emppersacct.mi
Gruppiere ich es so, bekomme ich nur die Summe der jeweiligen Gruppe. Lasse ich emppersacct.mi im Group by weg, bekomme ich wieder die gleiche Exception.

Was mache ich noch falsch? Wie gruppiere ich richtig, um das gewünschte Ergebnis zu erhalten?

polondo 10. Aug 2006 12:22

Re: Probleme mit sum function in sql-Statement
 
Mir fällt grade auf das Du das empersacct hier doppelt hast

SQL-Code:
from
   EmpPersAcct emppersacct
Hat das einen bestimmten Sinn?

TBx 10. Aug 2006 12:25

Re: Probleme mit sum function in sql-Statement
 
Zitat:

Zitat von barnti
Gruppiere ich es so, bekomme ich nur die Summe der jeweiligen Gruppe.

klahr, das ist der Sinn erd group by clause

Zitat:

Zitat von barnti
Wie gruppiere ich richtig, um das gewünschte Ergebnis zu erhalten?

hmm, ich dachte bisher, das sei das gewünschte Ergebnis. Wie soll das Ergebnis denn aussehen?

Gruß

onlinekater

TBx 10. Aug 2006 12:27

Re: Probleme mit sum function in sql-Statement
 
Zitat:

Zitat von polondo
Mir fällt grade auf das Du das empersacct hier doppelt hast

SQL-Code:
from
   EmpPersAcct emppersacct
Hat das einen bestimmten Sinn?

Das ist das Aliasing in SQL

Gruß

onlinekater

barnti 10. Aug 2006 12:40

Re: Probleme mit sum function in sql-Statement
 
Hi onlinekater,
Zitat:

Zitat von onlinekater
Wie soll das Ergebnis denn aussehen?

ich möchte die im Select aufgeführten Spalten + die Summe über die Spalte emppersacct.mi

mkinzler 10. Aug 2006 13:07

Re: Probleme mit sum function in sql-Statement
 
Wie gesagt bekommst du das nicht in einer einfachen Abfrage. wäre mit einem join oder ner SP möglich.

barnti 10. Aug 2006 13:15

Re: Probleme mit sum function in sql-Statement
 
Hi,
Zitat:

Zitat von mkinzler
Wie gesagt bekommst du das nicht in einer einfachen Abfrage. wäre mit einem join oder ner SP möglich.

Join? Verstehe ich nicht. Kannst Du das beispielhaft darstellen?

mkinzler 10. Aug 2006 13:19

Re: Probleme mit sum function in sql-Statement
 
du könntest zur jeder Zeile den Summenwert hinzujoinen. Oder 2halt 2 unterschiedliche Abfragen verwenden.

omata 10. Aug 2006 15:22

Re: Probleme mit sum function in sql-Statement
 
Hallo barnti,

deine Abfrage ist mir unverständlich. Das liegt vielleicht an Oracle...

Aber müssen nicht die JOINs mit der Haupttabelle verbunden werden? Und dann die Aliase, mach dir das Leben doch nicht so schwer. Nimm kürze und einfachere, dafür sind sie da.

SQL-Code:
SELECT c.code,
       a.nomDate,
       a.updTs,
       b.firstName,
       b.lastName,
       a.mi,
       SUM(a.mi)
FROM empPersAcct a
LEFT JOIN tcsLogin b
  ON ???
INNER JOIN persAcct c
  ON ???   
WHERE c.code = 'URLAUB'
  AND a.emp.empSk = -979941237706
         ^-- ???
Wie werden die Tabellen miteinander verbunden?

Warscheinlich bin ich nur zu unwissend in Bezug auf Oracle.

Gruss
Thorsten

barnti 10. Aug 2006 21:25

Re: Probleme mit sum function in sql-Statement
 
Hallo Thorsten,

ich frage die Datenbank über Hibernate (HQL) ab. Daher diese Syntax.

Ja, die Aliase sind etwas lang aber bei langen Abfragen wenigstens lesbar. Gibts da nun noch eine Möglichkeit oder muss ich das in mehreren einzelnen Abfragen lösen?

omata 10. Aug 2006 22:05

Re: Probleme mit sum function in sql-Statement
 
Hallo bartni,

ich versuche es einfach nochmal...

SQL-Code:
SELECT
   persacct.code,
   emppersacct.nomDate,
   emppersacct.updTs,
   tcslogin.firstName,
   tcslogin.lastName,
   emppersacct.mi,
   (SELECT SUM(emppersacct.mi)
    FROM EmpPersAcct
    WHERE ???) AS summe
   
FROM
   EmpPersAcct emppersacct
   LEFT JOIN emppersacct.tcsLogin tcslogin
   INNER JOIN emppersacct.persAcct persacct
   
WHERE persacct.code = 'URLAUB'
  AND emppersacct.emp.empSk = -979941237706
???: Hier muss die Verbindung zur aktuellen Zeile in der äußeren EmpPersAcct Tabelle hergestellt werden.

Da ich deine Datenbankbeziehungen nicht kenne, kann ich an der Stelle nicht weiter helfen. Welche Spalte(n) ist/sind den der/die Primarykey(s) in EmpPersAcct?

Eine Alternative wäre noch ein zweiter LEFT JOIN, in dem die Summen gebildet werden. Aber mit deinen komischen JOIN-Strukturen komme ich nicht klar, sorry.

Gruss
Thorsten


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:28 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz