2012-04-05 12 views
0

Ich verwende JPA2 für die Dao-Schicht.komplexe SQL-Abfrage mit Jpa Jpql

Angenommen habe ich eine Tabelle wie folgt (nur ein Beispiel):

emp_name  week  approver_name status hours 
emp1  2010-01-02 app1   a  2 
emp1  2010-01-02 app1   a  2 
emp1  2010-01-02 app2   b  3 
emp1  2010-01-09 app1   b  2 
emp1  2010-01-09 app2   a  7 
emp2  2010-01-02 app1   b  5 
emp2  2010-01-02 app2   a  9 
emp2  2010-01-02 app1   a  3 
emp2  2010-01-09 app2   a  4 
emp2  2010-01-09 app2   b  7 
emp2  2010-01-09 app1   a  3 
emp2  2010-01-09 app1   a  2 

nach den geben Tabellen, (eigentlich viel komplexer als diese), wie kann ich das Ergebnis wie diese

emp_name  week  approver_name status hours (add hours together) 
emp1  2010-01-02  app1   a  4 
emp1  2010-01-02  app2   b  3 
emp1  2010-01-09  app1   b  2 
emp1  2010-01-09  app2   a  7 
emp2  2010-01-02  app1   b  5 
emp2  2010-01-02  app1   a  3 
emp2  2010-01-02  app2   a  9 
emp2  2010-01-09  app1   a  5 
emp2  2010-01-09  app2   a  4 
emp2  2010-01-09  app2   b  7 
erhalten

NB: der Status muss auch unterschieden werden. auch die Stunden Spalte ist nicht in der db vorhanden, die Spalte ist start_time und end_time

so kann jeder eine gute Idee dafür haben? Ich kann 'nach jeder Spalte gruppieren, weil es Ergebnis mischen wird.

danke dafür.

Antwort

0

Versuchen Sie folgendes:

SELECT emp_name, week, approver_name, status, SUM(hours) 
FROM MyTable 
GROUP BY emp_name, week, approver_name, status 
ORDER BY emp_name, week, approver_name, status 
+0

Dank für Ihre Hilfe. Das sieht großartig aus. jedoch, wenn start_timestamp und end_timestamp Spalte die Stunden ersetzen, gibt es eine gute Methode? – ttt

+1

Hallo Michael, wenn es keine Stundenspalte in der Tabelle gibt, nur Start und Ende Zeitstempel, wie kann ich die richtigen Stunden berechnen? – ttt

+0

Nicht sicher, ob JPA etwas wie TIMESTAMPDIFF von MySQL unterstützt. Wenn es SUM (Stunden) mit SUMME ersetzt (TIMESTAMPDIFF (HOUR, Start, Ende)) –