112 10 Geschrieben 1. September 2016 Melden Teilen Geschrieben 1. September 2016 Hallo, ich bin neu in Sachen SQL unterwegs und brauche Hilfe. Ich habe in meiner Tabelle drei Spalten. In der ersten Spalte steht die Kostenstelle, in der zweiten Spalte eine 10-Stellige Nummer. zum Beispiel: 30300 303000012 40400 404000059 12000 120000121 In der Abfrage soll jetzt je nach Kostenstelle die höchste Nummer geholt und um den Wert 1 erhöht und ausgegeben werden. zum Beispiel: Es wird abgefragt nach der Kostenstelle 30300. Der aktuelle Wert bei 30300 ist 303000012. Jetzt soll zu der 303000012 +1 addiert, zurückschrieben und ausgeben werden. Also Ergebnis muss in der Tabelle unter 30300 danach stehen: 30300 303000013 Wie lautet hierzu die Abfrage? Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 1. September 2016 Melden Teilen Geschrieben 1. September 2016 Moin, "wähle den Wert Maximum aus der Spalte Kostenstelle sowie den Wert Maximum aus der Spalte Betrag addiert mit 1 aus, wo in der Spalte Kostenstelle '30300' steht". Und wenn das Ergebnis stimmt, ersetzt du das "Wähle aus"-Statement durch das "Aktualisiere"-Statement. Gruß, Nils Zitieren Link zu diesem Kommentar
MDD 12 Geschrieben 2. September 2016 Melden Teilen Geschrieben 2. September 2016 (bearbeitet) Moin, Und wenn das Ergebnis stimmt, ersetzt du das "Wähle aus"-Statement durch das "Aktualisiere"-Statement. Gruß, Nils Wenn ich die Aufgabenstellung richtig verstanden habe, gibt es in der Tabelle mehrere Einträge pro Kostenstelle, ansonsten würde es keinen Sinn machen den höchsten Wert pro Kostenstelle zu suchen. Das heißt man müsste das "Wähle aus"-Statement durch ein "Einfüge"-Statement ersetzen. EDIT siehe Post #4: Stichworte für die Suche nach dem höchsten Wort: GROUP BY sowie MAX() Gruß MDD bearbeitet 2. September 2016 von MDD Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 2. September 2016 Melden Teilen Geschrieben 2. September 2016 Moin, Das heißt man müsste das "Wähle aus"-Statement durch ein "Einfüge"-Statement ersetzen. Gruß MDD ja, guter Hinweis, das könnte sein. Dazu müsste man die Logik der Datenbank bzw. der Applikation kennen, um das zu entscheiden. Die Aussage "zurückgeschrieben" in der Anfrage lässt das offen. Stichworte für die Suche nach dem höchsten Wort: GROUP BY sowie MAX() Hm, GROUP BY sehe ich da jetzt nicht, weil ja nach einer konkreten Kostenstelle gefragt wird. Da reicht ein normaler Filter vermutlich aus. Gruß, Nils 1 Zitieren Link zu diesem Kommentar
magheinz 110 Geschrieben 2. September 2016 Melden Teilen Geschrieben 2. September 2016 (bearbeitet) Blöde Frage aber kannst du Einfluss auf das Datenbankdesign nehmen? Ich würde die Tabellen ja folgendermassen anlegen: 30300 0012 40400 0059 12000 0121 Das würde dir das leben hier stark vereinfachen. Du hast Infos redundant gespeichert. bearbeitet 2. September 2016 von magheinz Zitieren Link zu diesem Kommentar
MDD 12 Geschrieben 2. September 2016 Melden Teilen Geschrieben 2. September 2016 Tach, Hm, GROUP BY sehe ich da jetzt nicht, weil ja nach einer konkreten Kostenstelle gefragt wird. Da reicht ein normaler Filter vermutlich aus. Du hast absolut recht. Hab ich übersehen. Wer lesen kann ist klar im Vorteil. :suspect: Gruß MDD Zitieren Link zu diesem Kommentar
112 10 Geschrieben 2. September 2016 Autor Melden Teilen Geschrieben 2. September 2016 Hallo, vielen Dank schon mal. Zum besseren Verständnis, der Aufbau der Tabelle ist folgendermaßen: In Spalte 1 steht die Kostenstelle (Schlüsselfeld), in Spalte 2 eine fortlaufende Bestell-Nummer. Diese setzt sich zusammen aus der Kostenstellen, also Spalte 1 und weiteren 5 Ziffern. Unter der Kostenstelle gibt es jetzt beliebig viele Bestellungen. Wenn jetzt eine Bestellung geschrieben wird, soll mit dem Schlüssel Kostenstelle auf die Tabelle zugegriffen und die höchste Bestellnummer unter dieser Kostenstelle ermittelt und 1 dazu addiert werden. Das ergibt dann die Bestellnummer für die neue Bestellung. Wie sieht jetzt hier die Syntex aus? Angefangen von Select ..... bis zum Schluß. Die bisherigen Infos bringen mich kein Stück weiter. Der Umgang mit SQL ist völlig neu für mich, hatte bisher keinerleih Berührung damit. Nochmals vielen Dank für die Unterstützung! Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 2. September 2016 Melden Teilen Geschrieben 2. September 2016 Moin, die Syntax haben wir dir schon fast vorgegeben, nur noch nicht mit den SQL-Statements. Da du anscheinend anfängst, SQL zu lernen, solltest du versuchen, dir das anhand des geschilderten Algirithmus' zu erarbeiten. Da du mit SQL bislang noch nichts zu tun hattest, solltest du dich zunächst mit sehr einfachen Abfragen an die Sprache herantasten. Was du als Aufgabe beschrieben hast, ist schon ziemlich fortgeschritten. Mach lieber einen Schritt nach dem anderen. Hier findest du z.B. eine allererste Übersicht - aber das Web ist voll von guten Einführungen zu SQL. [Grundbefehle von SQL | faq-o-matic.net]http://www.faq-o-matic.net/2002/03/17/grundbefehle-von-sql-2/ Gruß, Nils Zitieren Link zu diesem Kommentar
112 10 Geschrieben 2. September 2016 Autor Melden Teilen Geschrieben 2. September 2016 Hallo Nils, danke für den Tipp. Allerdings ist diese Aufgabenstellung nicht zum Üben gedacht, sondern eine reale Anforderung die ich lösen muss. Ansonsten hätte ich vorher eine Schulung besucht und mich dann mit einfachen Anforderungen an die Sache herangetastet. Leider werde ich ins kalten Wasser geschmießen und muss zuerst die Anforderung lösen und erst danach kann ich eine Schulung besuchen. Viele Grüße Zitieren Link zu diesem Kommentar
magheinz 110 Geschrieben 2. September 2016 Melden Teilen Geschrieben 2. September 2016 "zuerst die Anforderung lösen" und "danach eine Schulung besuchen". Mir ist klar, das hilft dir nicht weiter, ich würde jedoch genau diese beiden Teile aus dem Satz so meinem Chef noch mal auf Papier zeigen. Der Widerspruch springt einem ja förmlich ins Gesicht. Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 2. September 2016 Melden Teilen Geschrieben 2. September 2016 Ein Lösungsansatz: INSERT INTO Tabelle1 ( Spalte2, Kostenstelle ) SELECT Max([Spalte2])+1 AS SpalteX, Tabelle1.Kostenstelle FROM Tabelle1 GROUP BY Tabelle1.Kostenstelle HAVING (((Tabelle1.Kostenstelle)="30300")); Zitieren Link zu diesem Kommentar
MDD 12 Geschrieben 2. September 2016 Melden Teilen Geschrieben 2. September 2016 (bearbeitet) Weiterer Ansatz ab MSSQL 2008 zumindest innerhalb des Management Studios INSERT INTO Tabelle1 ( Spalte2, Kostenstelle ) OUTPUT inserted.*SELECT Max([spalte2])+1 AS SpalteX, Tabelle1.KostenstelleFROM Tabelle1 WHERE Tabelle1.Kostenstelle='30300'; Hängt aber ganz ab womit du die Daten verarbeiten willst/musst. Schönes WE MDD bearbeitet 2. September 2016 von MDD Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 4. September 2016 Melden Teilen Geschrieben 4. September 2016 (bearbeitet) Moin, ich sehe weiterhin keinen Grund für GROUP BY und würde es mit einem einfachen Filter machen. Also, hier mein Vorschlag, diesmal dann eben als Code: SELECT MAX(Kostenstelle), MAX(Bestellnr) + 1 FROM Tabelle WHERE Kostenstelle = '30300' Und wenn das passt: INSERT INTO Tabelle (Kostenstelle, Bestellnr) SELECT MAX(Kostenstelle), MAX(Bestellnr) + 1 FROM Tabelle WHERE Kostenstelle = '30300' Aber ganz ehrlich, ich kann mir nicht vorstellen, wie jemand das Lösen einer doch recht komplexen Anfrage dieser Art jemandem übergibt, der SQL nicht kennt. Am Ende musst du damit selbst umgehen - aber ich werde das Gefühl nicht los, dass wir hier für jemanden gerade die Hausaufgaben erledigen, und das mache ich ungern. Gruß, Nils bearbeitet 4. September 2016 von NilsK 1 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.