Entwickler-Ecke

Datenbanken - Frage zu einem SQL Problem


HelgeLange - Do 20.10.11 19:54
Titel: Frage zu einem SQL Problem
Hallo, habe mal eine Frage zu einem Query

Nehmen wir mal an ich habe eine Tabelle mit einer eindeutigen ID, einer GruppenID und einem Wert.
Nun brauche ich ein SQL, welches mit die Werte zusammenrechnet, allerdings auch nur für die GruppenID.


SQL-Anweisung
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
select 
    pr_actividadesdet.item,
    pr_otdet.id,
    pr_actividades.unidades unidades_actividad,

    pr_otstatus.id_subot,
    pr_actividadesdet.unidades unidades_item,
    (SELECT SUM(Entregar) FROM PR_OTStatus WHERE ID_DET = PR_OTDet.id) Entregado,
    (SELECT SUM(Instalado) FROM PR_OTStatus WHERE ID_DET = PR_OTDet.id) Instalado,
    (SELECT SUM(Verificado) FROM PR_OTStatus WHERE ID_DET = PR_OTDet.id) Verificado,
    (SELECT SUM(Devuelto) FROM PR_OTStatus WHERE ID_DET = PR_OTDet.id) Devuelto,
    (SELECT SUM(Desperdicio) FROM PR_OTStatus WHERE ID_DET = PR_OTDet.id) Desperdicio,
    (SELECT SUM(Sobrante) FROM PR_OTStatus WHERE ID_DET = PR_OTDet.id) Sobrante,
    (SELECT SUM(Otros) FROM PR_OTStatus WHERE ID_DET = PR_OTDet.id) Otros,
    pr_actividades.start_date,
    pr_actividades.end_date,
    item.descripcion,
    (pr_actividadesdet.unidades * pr_actividades.unidades) Unidades_Total,
    pr_otdet.id_ot,
    ((pr_actividadesdet.unidades * pr_actividades.unidades) - pr_otdet.entregado + pr_otdet.devuelto) Por_Entregar
from item
   inner join pr_actividadesdet on (item.item = pr_actividadesdet.item)
   inner join pr_otdet on (pr_actividadesdet.id = pr_otdet.id_act)
   inner join pr_actividades on (pr_actividadesdet.id_actividad = pr_actividades.id)
   left join pr_otstatus on (pr_otstatus.id_det = pr_otdet.id )


Mir geht es speziell um die Sub-SELECT statements. Im moment rechnen sie das für die ganze Tabelle zusammen, welche das Kriterium "WHERE ID_DET = PR_OTDet.id" erfüllen. Ich bräuchte aber noch, dass man es nach pr_otstatus.id_subot filter kann, welches im WHERE des kompletten SELECT angegeben wird (das gepostete SELECT ist ein VIEW in meiner DB).

Geht es überhaupt ? Und wenn ja, wie ?

Danke schonmal

Moderiert von user profile iconNarses: Beiträge zusammengefasst

Achja, wie gesagt, das Ganze ist eim View, V_PR_OTData und ich will es wie folgt aufrufen :

für alle Daten unabhängig von ID_SubOT :

SQL-Anweisung
1:
SELECT * FROM V_PR_OTData WHERE ID_OTE = :ID_OTE                    


und für die Werte nur von ID_SubOT :

SQL-Anweisung
1:
SELECT * FROM V_PR_OTData WHERE ID_OTE = :ID_OTE AND ID_SubOT = :ID_SubOT                    


Diese ID_SubOT muss also irgendwie oben in die Sub-SELECTs einfliessen. Wenn es möglich ist :)


bummi - Do 20.10.11 22:23

Ich kenne die Zusammenhänge ja nicht, aber im Moment hast Du
id_subot und ID_OTE in Deinem äußeren Select
also entweder mehrere id_subot für ein ID_OTE oder umgekehrt
die inneren Summen müssten dann IMHO auch id_subot in der Wherebedingung enthalten
und die View dann mit Group by ID_OTE abgefragt werden.
Überhaupt stellt sich mir die Frage ob die ganze Sicht nicht für die feinere Granulation direkt mit Group by erstellt werden könnte
für die gröbere Summierung dann eine 2. Sicht die die erste wieder per Group by abfragt.