Autor Beitrag
HelgeLange
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 735
Erhaltene Danke: 6

Windows 7
Delphi7 - Delphi XE
BeitragVerfasst: Do 20.10.11 19:54 
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.

ausblenden 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 :
ausblenden SQL-Anweisung
1:
SELECT * FROM V_PR_OTData WHERE ID_OTE = :ID_OTE					


und für die Werte nur von ID_SubOT :
ausblenden 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 :)

_________________
"Ich bin bekannt für meine Ironie. Aber auf den Gedanken, im Hafen von New York eine Freiheitsstatue zu errichten, wäre selbst ich nicht gekommen." - George Bernhard Shaw
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: 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.

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS