Wert einem Bereich zuordnen
Eingesetzt wird Microsoft SQL2005
Hallo,
ich habe ein für euch sicher kleines, für mich leider größeres Problem!!
Ich habe eine Tabelle in der Grenzwerte eingetragen sind.Die Tabelle sieht folgender Maßen aus:
Prozent.....max_Lüftungen......Raum
10 ...................1....................2
30....................2....................2
75....................3....................2
75....................4....................2
30....................2....................4
30....................5....................4
50....................1....................6
50....................2....................6 ...etc
Zu lesen wäre das wie: Raum2: <10% --> 1 Lüfter; <30% --> 2 Lüfter; < 75% --> 3 Lüfter und >75% --> 4 Lüfter
In dieser Tabelle ist also hinterlegt, bis zu wieviel Prozent an Temp. wieviel Lüftungen laufen dürfen. Also bspw. bei 40% Temp. in Raum 2 sollen 2 Lüfter laufen usw.
Nun habe ich eine Table-Valued-Function (FC-Tabelle), die mir aus mehreren Tabellen den aktuellen Prozentwert und die aktuelle Anzahl an laufenden Lüftern zurück gibt.
akt_Prozent.....Lüftungen.......Raum
40....................1....................2
65....................2....................4
75....................3....................6
Soo ... mein genaues Problem nun: Wie könnte der SELECT-Befehl aussehen, dass mir anhand dieser 2 Tabellen (Tabelle Grenzwerte und FC-Tabelle) sowas zurückgibt:
akt_Prozent....benötigte Lüftungen.....Raum
40.........................2.........................2
65.........................5.........................4
75.........................2.........................6
Ich hoffe ich konnte das Problem einigermaßen verdeutlichen und bin dankbar über jede Hilfe!!!
Grüße Fred
Hallo,
ich habe ein für euch sicher kleines, für mich leider größeres Problem!!
Ich habe eine Tabelle in der Grenzwerte eingetragen sind.Die Tabelle sieht folgender Maßen aus:
Prozent.....max_Lüftungen......Raum
10 ...................1....................2
30....................2....................2
75....................3....................2
75....................4....................2
30....................2....................4
30....................5....................4
50....................1....................6
50....................2....................6 ...etc
Zu lesen wäre das wie: Raum2: <10% --> 1 Lüfter; <30% --> 2 Lüfter; < 75% --> 3 Lüfter und >75% --> 4 Lüfter
In dieser Tabelle ist also hinterlegt, bis zu wieviel Prozent an Temp. wieviel Lüftungen laufen dürfen. Also bspw. bei 40% Temp. in Raum 2 sollen 2 Lüfter laufen usw.
Nun habe ich eine Table-Valued-Function (FC-Tabelle), die mir aus mehreren Tabellen den aktuellen Prozentwert und die aktuelle Anzahl an laufenden Lüftern zurück gibt.
akt_Prozent.....Lüftungen.......Raum
40....................1....................2
65....................2....................4
75....................3....................6
Soo ... mein genaues Problem nun: Wie könnte der SELECT-Befehl aussehen, dass mir anhand dieser 2 Tabellen (Tabelle Grenzwerte und FC-Tabelle) sowas zurückgibt:
akt_Prozent....benötigte Lüftungen.....Raum
40.........................2.........................2
65.........................5.........................4
75.........................2.........................6
Ich hoffe ich konnte das Problem einigermaßen verdeutlichen und bin dankbar über jede Hilfe!!!
Grüße Fred
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 169486
Url: https://administrator.de/contentid/169486
Ausgedruckt am: 26.11.2024 um 10:11 Uhr
6 Kommentare
Neuester Kommentar
Hai Fred,
Möglichkeit 1:
Wenn Du auch eine ID bei Deinen Grenzwerten hast, gibt es noch die Möglichkeit 2:
Beide Lösungen haben aber ein Problem: In Deiner Grenzwerttabelle ist kein Kennzeichen, ob der angegebene Grenzwert unterschritten sein muß oder ob die Anzahl Lüftungen ab diesem Grenzwert gelten. Für die Räume bekämst Du also z.B. kein Ergebnis, wenn die Prozentzahl 90 wäre. Eine ganz einfache Lösung wäre, wenn in der Tabelle der Grenzwert IMMER unterschritten sein muß. Dafür trägst Du für den Datensatz, der die maximale Anzahl Lüftungen angibt, eine utopisch hohe Prozentzahl ein, die nie erreicht wird. Z.B.
10 1 2
30 2 2
75 3 2
9999 4 2
30 2 4
9999 5 4
50 1 6
9999 2 6 ...etc
Oder eben ein Kennzeichen, daß man weiß, wie der Prozentsatz ausgewertet werden muß.
Zwar könnte ich auch eine Abfrage erstellen, die Dir auf Deinen Daten das korrekte Ergebnis liefert, aber ich glaube, die willst Du gar nicht sehen
Gruß, Mad Max
Möglichkeit 1:
select t.Raum, t.akt_Prozent, t.Lüftungen,
(select top 1 max_Lüftungen from Grenzwerte where Raum = t.Raum and Prozent > t.akt_Prozent order by Prozent) as max_Lüftungen
from FCTabelle t
Wenn Du auch eine ID bei Deinen Grenzwerten hast, gibt es noch die Möglichkeit 2:
select t.Raum, t.akt_Prozent, t.Lüftungen, g.max_Lüftungen
from FCTabelle t
left join Grenzwerte g on ID = (select top 1 ID from Grenzwerte where Raum = t.Raum and Prozent > t.akt_Prozent order by Prozent)
Beide Lösungen haben aber ein Problem: In Deiner Grenzwerttabelle ist kein Kennzeichen, ob der angegebene Grenzwert unterschritten sein muß oder ob die Anzahl Lüftungen ab diesem Grenzwert gelten. Für die Räume bekämst Du also z.B. kein Ergebnis, wenn die Prozentzahl 90 wäre. Eine ganz einfache Lösung wäre, wenn in der Tabelle der Grenzwert IMMER unterschritten sein muß. Dafür trägst Du für den Datensatz, der die maximale Anzahl Lüftungen angibt, eine utopisch hohe Prozentzahl ein, die nie erreicht wird. Z.B.
10 1 2
30 2 2
75 3 2
9999 4 2
30 2 4
9999 5 4
50 1 6
9999 2 6 ...etc
Oder eben ein Kennzeichen, daß man weiß, wie der Prozentsatz ausgewertet werden muß.
Zwar könnte ich auch eine Abfrage erstellen, die Dir auf Deinen Daten das korrekte Ergebnis liefert, aber ich glaube, die willst Du gar nicht sehen
Gruß, Mad Max
Nabend Fred,
Deine Aussage "Also im Prinzip spielt sich das von 0% bis 100% ab." deute ich so, daß es evtl. doch auch andere Werte haben kann. Ich weiß ja nicht, was das für ein Grenzwert ist, ob 100% oder mehr überhaupt sein kann. In der Grenzwerttabelle sollte jedenfalls der höchste Wert, den Du ja jetzt auf 100 gesetzt hast, mindestens um eins höher sein, als der größte zu erwartende akt_Prozent-Wert. So wie die Abfrage formuliert ist, wird nämlich bei akt_Prozent = 100 der nächst größere Grenzwert gesucht und den gibt es nicht. Wenn ein Wert von 100 oder mehr einen Fehler darstellt, kannst Du die dann natürlich erkennen, weil max_Lüftungen dann NULL ist.
Wobei ein Prozentwert von 1000 ja auch nicht weh täte oder ein Kennzeichen, daß ein Datensatz der ist, der alles höhere abdeckt.
Aber wo ich gerade so schreibe, fällt mir gerade doch noch eine einfache Lösung für Deine Daten in jetziger Form ein:
Wenn kein Datensatz in der Grenzwerttabelle gefunden wird, bei dem die Prozente größer sind, wird der Datensatz mit der höchsten angegeben Prozentzahl zurückgegeben.
Gruß, Mad Max
Deine Aussage "Also im Prinzip spielt sich das von 0% bis 100% ab." deute ich so, daß es evtl. doch auch andere Werte haben kann. Ich weiß ja nicht, was das für ein Grenzwert ist, ob 100% oder mehr überhaupt sein kann. In der Grenzwerttabelle sollte jedenfalls der höchste Wert, den Du ja jetzt auf 100 gesetzt hast, mindestens um eins höher sein, als der größte zu erwartende akt_Prozent-Wert. So wie die Abfrage formuliert ist, wird nämlich bei akt_Prozent = 100 der nächst größere Grenzwert gesucht und den gibt es nicht. Wenn ein Wert von 100 oder mehr einen Fehler darstellt, kannst Du die dann natürlich erkennen, weil max_Lüftungen dann NULL ist.
Wobei ein Prozentwert von 1000 ja auch nicht weh täte oder ein Kennzeichen, daß ein Datensatz der ist, der alles höhere abdeckt.
Aber wo ich gerade so schreibe, fällt mir gerade doch noch eine einfache Lösung für Deine Daten in jetziger Form ein:
select t.Raum, t.akt_Prozent, t.Lüftungen,
IsNull ((select top 1 max_Lüftungen from Grenzwerte where Raum = t.Raum and Prozent > t.akt_Prozent order by Prozent),
(select top 1 max_Lüftungen from Grenzwerte where Raum = t.Raum order by Prozent desc)) as max_Lüftungen
from FCTabelle t
Wenn kein Datensatz in der Grenzwerttabelle gefunden wird, bei dem die Prozente größer sind, wird der Datensatz mit der höchsten angegeben Prozentzahl zurückgegeben.
Gruß, Mad Max