menslo 0 Geschrieben 14. November 2021 Melden Teilen Geschrieben 14. November 2021 Hallo zusammen, ich versuche mich gerade ein wenig in SQL einzulesen und habe mir ein "kleines" Projekt vorgenommen, was ich gerne in einer SQL DB verwirklichen möchte. Bin noch ein wenig dabei Herumzurpobieren wie ich die Tabellen am besten gestalte, hänge jedoch an einer Funktion, bei der ich nicht sicher bin, wie ich es über SQL realisieren kann. Zu der Situation: Ich habe ein Kind, was in einer Betreuung ist. Je nach Alter des Kindes wird es in einer anderen Gruppe betreut. Gruppe 1 geht bis drei Jahre Gruppe 2 von drei Jahren bis zu dem Sommer nachdem es 6 Jahre alt wird Gruppe 3 Ab dem Sommer nachdem es 3 Jahre alt wird bis 12 Jahre Ist es mit SQL möglich, anhand des Geburtsdatums das Kind in den jeweiligen Gruppen zuzuordnen, bzw. die Eintritts- und Austrittsdaten jeweils automatisiert einzutragen? Ich hoffe ich habe mich verständlich ausgedrückt :) Zitieren Link zu diesem Kommentar
NilsK 2.932 Geschrieben 14. November 2021 Melden Teilen Geschrieben 14. November 2021 Moin, Ja, das ist natürlich möglich. Genau wie bei anderen Programmlōsungen musst du dir hier einen Algorithmus überlegen, der beschreibt, was du brauchst. Dann schaust du, wie du diesen umsetzt. Den Grundstock für deinen Algorithmus hat du ja schon beschreiben. Den musst du nun noch verfeinern - spontan denke ich da an sowas wie: was heißt "Sommer" genau? Wie ist und wann findet die Zuordnung statt? Usw. Zur Umsetzung: wie weit bist du in SQL denn schon gekommen? Welche ersten Ideen hättest du denn, wie du die Umsetzung angehen könntest? Gruß, Nils Zitieren Link zu diesem Kommentar
menslo 0 Geschrieben 14. November 2021 Autor Melden Teilen Geschrieben 14. November 2021 Erstmal vielen Dank für die Rückmeldung. Du hast recht - Sommer ist da sehr ungenau. Konkret meine ich damit den 31.07. des jeweiligen Jahres. Gruppe 1 bis drei Jahre Gruppe 2 von drei Jahren bis zu dem 31.07. nachdem es 6 Jahre alt wird Gruppe 3 Ab dem Sommer nachdem es 3 Jahre alt wird bis 12 Jahre Zum Vorgehen: Zunächst würde ich mir das Alter geben, bei dem SQL Befehl bin ich mir jedoch nicht sicher und würde mich erstmal an dem Excel Befehl orientieren (wofür ich wahrscheinlich gesteinigt werde :) ). Das setzt natürlich voraus, dass es Funtkionen wie DATEDIF und HEUTE gibt (soweit bin ich noch nicht in SQL). Angenommen, es ist ähnlich wie in Excel SELECT DATEDIF('Geburtsdatum', HEUTE) FROM Kind Anschließend die UPDATE Funktion mit dem Ergebnis des oben stehenden Befehls kombinieren - irgendwie wie folgt UPDATE Kind SET Gruppe = 1 IF Alter < 3 ELSE SET Gruppe = 2 IF Alter > 3 Würde das in der Richtung so gehen? Wie das Statement lauten für Gruppe 3 (Eintritt ab 01.08. nach dem 6. Geburtstag) lauten soll, bin ich allerdings gerade noch überfragt Zitieren Link zu diesem Kommentar
NilsK 2.932 Geschrieben 14. November 2021 Melden Teilen Geschrieben 14. November 2021 (bearbeitet) Moin, dafür dass du mit SQL anscheinend noch nicht so weit bist, hast du dir ein ziemlich komplexes Szenario ausgesucht. Daher empfehle ich dir, dass du dich ranhangelst. Das würde man beim Entwickeln auch machen, wenn man schon weiter ist. Bevor du also irgendwas in die Datenbank schreibst, prüfe erst mal deine Select-Kriterien, ob sie dir in allen Fällen die richtigen Daten zurückgeben. Wenn du das hast, könntest du dir z.B. eine View in der Datenbank bauen, die dir zu jedem Kind angibt, in welche Gruppe es gehört. Ob du das Ergebnis dann überhaupt noch "fest" in eine Tabelle schreiben musst, hängt von der Logik deiner Anwendung ab. DATEDIFF könnte dabei eine hilfreiche Funktion sein; Transact-SQL kennt eine ganze Reihe von Datumsfunktionen. Das ist auch gut dokumentiert - arbeite dich also auch gleich in die Doku ein. https://docs.microsoft.com/en-us/sql/t-sql/functions/datediff-transact-sql?view=sql-server-ver15 Gruß, Nils bearbeitet 14. November 2021 von NilsK Zitieren Link zu diesem Kommentar
menslo 0 Geschrieben 15. November 2021 Autor Melden Teilen Geschrieben 15. November 2021 Ja du hast Recht - ich war mit meinem Kopf noch an einer anderen Baustelle. Das Alter hole ich mir mit SELECT name, vorname, geburtsdatum, datediff(yy, geburtsdatum, getdate()) AS 'Alter' FROM kind Die Gruppe wollte ich entsprechend zuteilen mit SELECT name, vorname, geburtsdatum, datediff(yy, geburtsdatum, getdate()) AS 'Alter' FROM kind UPDATE kind SET Bereich = 1 WHERE 'Alter' < 3; Da habe ich allerdings wohl einen Denkfehler drin, denn er nimmt das 'Alter' < 3 nicht an. Wenn ich dort allerdings eine Funktion einbauen kann, die mir anzeigt, in welche Gruppe das Kind gehört, wäre das natürlich sehr viel besser! Hm, aber wie baue ich so eine View in SSMS? Zitieren Link zu diesem Kommentar
NilsK 2.932 Geschrieben 15. November 2021 Melden Teilen Geschrieben 15. November 2021 Moin, Eine View baust du mit Create View. Auch dazu findest du das Nötige in der Doku. Dein Update geht deshalb nicht, weil die Tabelle ja keine Spalte "Alter" hat. Die hast du nur in deiner Abfrage virtuell erzeugt. Du könntest aber die Logik, die in deiner Abfrage das Alter errechnet, auch direkt in deinem Update-Statement in der Where-Klausel verwenden. Gruß, Nils Zitieren Link zu diesem Kommentar
menslo 0 Geschrieben 16. November 2021 Autor Melden Teilen Geschrieben 16. November 2021 (bearbeitet) Ahja, das DATEDIFF in die Where Klausel zu packen funktioniert prima - Vielen Dank dafür! Nun bekomme ich die Abfrage für Gruppe 1 hin - jedoch für die Austrittsbedingung für Gruppe 2, bzw. Eintrittsbedingung Gruppe 3 (Alter 6 Jahre, der darauffolgende 31.07.) da habe ich so gar keine Idee. bearbeitet 16. November 2021 von menslo Zitieren Link zu diesem Kommentar
Sunny61 806 Geschrieben 16. November 2021 Melden Teilen Geschrieben 16. November 2021 vor 11 Stunden schrieb menslo: Wenn ich dort allerdings eine Funktion einbauen kann, die mir anzeigt, in welche Gruppe das Kind gehört, wäre das natürlich sehr viel besser! Hm, aber wie baue ich so eine View in SSMS? Funktionen kannst Du dir selbst erstellen. Datenbank aufklappen > Programmierbarkeit > Funktionen. Rechtsklick auf Funktionen > neue Skalarwertfunktion. Diese Funktion kannst Du auch in einer StoredProcedure verwenden, ob das in einer View funktioniert weiß ich nicht. Eine StoredProcedure darf NIE mit sp im Namen beginnen, die sp zu Beginn sind für MS reserviert. Zitieren Link zu diesem Kommentar
NilsK 2.932 Geschrieben 16. November 2021 Melden Teilen Geschrieben 16. November 2021 (bearbeitet) Moin, da du ja nur drei Fälle zu unterscheiden hast, reicht vielleicht ein CASE-Konstrukt aus. Eine eigene Funktion dafür kann man auch bauen, aber das erscheint mir hier zu hoch gegriffen. [CASE (Transact-SQL) - SQL Server | Microsoft Docs]https://docs.microsoft.com/de-de/sql/t-sql/language-elements/case-transact-sql?view=sql-server-ver15 Vielleicht noch eine allgemeine Anmerkung: Wie gesagt, für den Anfang ist das Vorhaben schon ziemlich komplex. Ich würde das jetzt erst mal in kleine Teile zerlegen. Für die Einsortierung in wenige Kategorien etwa wirst du im Web -zig Anregungen finden. Bau dir damit erst mal ein paar Abfragen, die die Werte nur ausgeben. Wenn du das drauf hast (da wird es vermutlich mehrere Möglichkeiten geben) gehst du weiter und schaust, welchen der Wege du in deinem Szenario gut weiter verwenden kannst. Gruß, Nils bearbeitet 16. November 2021 von NilsK Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.