Select-Anweisung in Where Bedingung
Verwendet wird SQL2005
Hey,
ich versuche vergebens eine Select-Anweisung in einer Where-Bedingung einer Select-Anweisung einzubauen.
Hintergrund ist folgender:
Es gibt eine Tabelle Werkstuecke welche als Spalten hat: ID, Bearbeitungs_ID, Anzahl, Startzeit und Endzeit. Die Werkstücke werden alle im Betrachtungsintervall t=+30min bis t=+60min bearbeitet, bzw. es gibt Werkstücke, die schon zuvor angefangen haben mit der Bearbeitung.
Soo nun möchte ich ermitteln, wieviel Maschinen in dem Betrachtungsfenster in Bearbeitung sind. Das mache ich dann so, dass ich schaue, welche Werkstuecke zu einem Zeitpunkt t=+30min bis t=+60min bereits in Bearbeitung sind dh ich schaue, wo startzeit vor t=+30 bis +60 fallen.
Das mache ich so (erste Select-Anweisung):
Diese Anweisung klappt auch ganz gut. Dh. ich bekomme eine Tabelle:
Bearbeitungs_ID......|...Anzahl_an_Maschinen
2..................................2
5..................................2
--> Es sind in 30 Minuten bereits 2 Maschinen in Arbeit mit Bearbeitungs_ID = 2 und 2 Maschinen mit Bearbeitungs_ID = 5.
Jetzt gibt es aber auch Werkstücke die erst in diesem Zeitraum mit der Bearbeitung anfangen. Das versuche ich ähnlihc wie oben zu ermittlen nur ohne Where-Anweisung:
Ich erhalte:
Bearbeitungs_ID......|...Anzahl_an_Maschinen
2..................................6
3..................................4
4..................................4
5..................................2
SO und genau da liegt mein Problem. Ich würde gerne in die Where-Bedingung etwas (zb. ein select) einbauen, was mir sowas wie unten ausgibt!!!
IBearbeitungs_ID......|...Anzahl_an_Maschinen
2..................................2
3..................................0
4..................................0
5..................................2
Dh. aus der ersten Tabelle habe ich ja nur Bearbeitung_ID = 2 und 5 mit jeweils 2 Maschienen gefunden die Trage ich in Tabelle ein. Der Rest hat noch nicht angefangen daher dort die 0, weil dort noch keine Maschine in Bearbeitung.
Kann mir jemand sagen wie ich das zu Lösen habe?!?
Ich hoffe ihr vesteht mich und könnt mir weiterhelfen!!
Danke und Grüße
Fred!!!!
... EDIT: ich würde es auch mit einem select into lösen wenn es ginge (ich weiss halt nurnicht wie!!!!!)
EDIT_NEU: was ich mit meinem Edit meinte war dass ich, wenn ich eine select .. into anweisung machen würde, in der Where Bedingung angeben müsste:
Hey,
ich versuche vergebens eine Select-Anweisung in einer Where-Bedingung einer Select-Anweisung einzubauen.
Hintergrund ist folgender:
Es gibt eine Tabelle Werkstuecke welche als Spalten hat: ID, Bearbeitungs_ID, Anzahl, Startzeit und Endzeit. Die Werkstücke werden alle im Betrachtungsintervall t=+30min bis t=+60min bearbeitet, bzw. es gibt Werkstücke, die schon zuvor angefangen haben mit der Bearbeitung.
Soo nun möchte ich ermitteln, wieviel Maschinen in dem Betrachtungsfenster in Bearbeitung sind. Das mache ich dann so, dass ich schaue, welche Werkstuecke zu einem Zeitpunkt t=+30min bis t=+60min bereits in Bearbeitung sind dh ich schaue, wo startzeit vor t=+30 bis +60 fallen.
Das mache ich so (erste Select-Anweisung):
select Bearbeitungs_id, count(t.Bearbeitungs_ID) as Anzahl_an_Maschinen
from dbo.Werkstuecke as t
where Startzeit < "T=+30" -- also wo Startzeit bereits vorher angefangen hat wie t=+30
GROUP BY t.Bearbeitungs_ID
Bearbeitungs_ID......|...Anzahl_an_Maschinen
2..................................2
5..................................2
--> Es sind in 30 Minuten bereits 2 Maschinen in Arbeit mit Bearbeitungs_ID = 2 und 2 Maschinen mit Bearbeitungs_ID = 5.
Jetzt gibt es aber auch Werkstücke die erst in diesem Zeitraum mit der Bearbeitung anfangen. Das versuche ich ähnlihc wie oben zu ermittlen nur ohne Where-Anweisung:
select t.Bearbeitungs_ID, count(t.Bearbeitungs_ID)
from dbo.Werkstuecke ]as t
GROUP BY t.Bearbeitungs_ID
Bearbeitungs_ID......|...Anzahl_an_Maschinen
2..................................6
3..................................4
4..................................4
5..................................2
SO und genau da liegt mein Problem. Ich würde gerne in die Where-Bedingung etwas (zb. ein select) einbauen, was mir sowas wie unten ausgibt!!!
IBearbeitungs_ID......|...Anzahl_an_Maschinen
2..................................2
3..................................0
4..................................0
5..................................2
Dh. aus der ersten Tabelle habe ich ja nur Bearbeitung_ID = 2 und 5 mit jeweils 2 Maschienen gefunden die Trage ich in Tabelle ein. Der Rest hat noch nicht angefangen daher dort die 0, weil dort noch keine Maschine in Bearbeitung.
Kann mir jemand sagen wie ich das zu Lösen habe?!?
Ich hoffe ihr vesteht mich und könnt mir weiterhelfen!!
Danke und Grüße
Fred!!!!
... EDIT: ich würde es auch mit einem select into lösen wenn es ginge (ich weiss halt nurnicht wie!!!!!)
EDIT_NEU: was ich mit meinem Edit meinte war dass ich, wenn ich eine select .. into anweisung machen würde, in der Where Bedingung angeben müsste:
WHERE Bearbeitungs_ID <> (erste Select-Anweisung)
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 169996
Url: https://administrator.de/contentid/169996
Ausgedruckt am: 22.11.2024 um 17:11 Uhr
5 Kommentare
Neuester Kommentar
Hallo Fred,
ich weiß nicht ob ich dich richtig verstanden habe. Du willst also den select auf eine Untermenge ausführen?
Das ginge in Etwa so:
select Bearbeitungs_id, count(t.Bearbeitungs_ID) as Anzahl_an_Maschinen
from dbo.Werkstuecke as t
where Startzeit in (select spalte1,spalte2,spalte3 from tabelle1 where spalte1 = 'blah')
GROUP BY t.Bearbeitungs_ID;
Mit dem eingefügten SELECT wählst du die Untermenge aus, über die der eigentliche SELECT laufen soll.
Gruß
Cadel
ich weiß nicht ob ich dich richtig verstanden habe. Du willst also den select auf eine Untermenge ausführen?
Das ginge in Etwa so:
select Bearbeitungs_id, count(t.Bearbeitungs_ID) as Anzahl_an_Maschinen
from dbo.Werkstuecke as t
where Startzeit in (select spalte1,spalte2,spalte3 from tabelle1 where spalte1 = 'blah')
GROUP BY t.Bearbeitungs_ID;
Mit dem eingefügten SELECT wählst du die Untermenge aus, über die der eigentliche SELECT laufen soll.
Gruß
Cadel
willst du alle Maschinen die gerade arbeiten und alle die in den nächtsen 30 min starten? was ist mit den 60 Minuten?
kannst nicht alle Maschinen Abfragen, bei denen die Endzeit < Jetzt und die Startzeit < Jetzt +30 ist?
ah, du willst aber immer eine vollständige Liste der Werkstücke - egal ob gerade bearbeitet, oder nicht?
gibt es bearbeitungs_ID in einer anderen Tabelle, ev. kannst du da mit JOINs arbeiten.
sg Dirm