[SQL] Frage zu einem SQL Problem
spacer
Autor Nachricht
HelgeLange
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 715
Erhaltene Danke: 4

Windows 7
Delphi7 - Delphi XE
BeitragVerfasst: Do 20.10.11 19:54 
Betrifft: SQL
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 markieren
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 markieren
1:
SELECT * FROM V_PR_OTData WHERE ID_OTE = :ID_OTE


und für die Werte nur von ID_SubOT :
ausblenden SQL-Anweisung markieren
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
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.


Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 979
Erhaltene Danke: 124

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
DRY DRY KISS
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
home home