Zum Inhalt wechseln


Foto

Max. Wert + 1

MS SQL

  • Bitte melde dich an um zu Antworten
12 Antworten in diesem Thema

#1 112

112

    Newbie

  • 3 Beiträge

 

Geschrieben 01. September 2016 - 13:06

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?

 

 

 

 

 



#2 NilsK

NilsK

    Expert Member

  • 12.346 Beiträge

 

Geschrieben 01. September 2016 - 14:19

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


Nils Kaczenski

MVP Cloud and Datacenter Management
... der beste Schritt zur Problemlösung: Anforderungen definieren!

Kostenlosen Support gibt es nur im Forum, nicht privat!


#3 MDD

MDD

    Newbie

  • 34 Beiträge

 

Geschrieben 02. September 2016 - 07:07

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 von MDD, 02. September 2016 - 08:03.

Wir finden für jede Lösung ein Problem

Man steckt immer in einem Sumpf voll Arbeit, nur die Tiefe ändert sich.


#4 NilsK

NilsK

    Expert Member

  • 12.346 Beiträge

 

Geschrieben 02. September 2016 - 07:25

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


  • MDD gefällt das

Nils Kaczenski

MVP Cloud and Datacenter Management
... der beste Schritt zur Problemlösung: Anforderungen definieren!

Kostenlosen Support gibt es nur im Forum, nicht privat!


#5 magheinz

magheinz

    Newbie

  • 1.330 Beiträge

 

Geschrieben 02. September 2016 - 07:29

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 von magheinz, 02. September 2016 - 07:29.


#6 MDD

MDD

    Newbie

  • 34 Beiträge

 

Geschrieben 02. September 2016 - 08:02

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


Wir finden für jede Lösung ein Problem

Man steckt immer in einem Sumpf voll Arbeit, nur die Tiefe ändert sich.


#7 112

112

    Newbie

  • 3 Beiträge

 

Geschrieben 02. September 2016 - 10:05

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!



#8 NilsK

NilsK

    Expert Member

  • 12.346 Beiträge

 

Geschrieben 02. September 2016 - 10:22

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-mat...ehle-von-sql-2/

 

Gruß, Nils


Nils Kaczenski

MVP Cloud and Datacenter Management
... der beste Schritt zur Problemlösung: Anforderungen definieren!

Kostenlosen Support gibt es nur im Forum, nicht privat!


#9 112

112

    Newbie

  • 3 Beiträge

 

Geschrieben 02. September 2016 - 12:27

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



#10 magheinz

magheinz

    Newbie

  • 1.330 Beiträge

 

Geschrieben 02. September 2016 - 13:14

"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.



#11 Cybquest

Cybquest

    Expert Member

  • 1.882 Beiträge

 

Geschrieben 02. September 2016 - 13:26

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"));


My name is Frank, you can say you to me.

#12 MDD

MDD

    Newbie

  • 34 Beiträge

 

Geschrieben 02. September 2016 - 14:35

Weiterer Ansatz ab MSSQL 2008 zumindest innerhalb des Management Studios

 

INSERT INTO Tabelle1 ( Spalte2, Kostenstelle )

OUTPUT inserted.*
SELECT Max([Spalte2])+1 AS SpalteX, Tabelle1.Kostenstelle
FROM Tabelle1

WHERE Tabelle1.Kostenstelle='30300';

 

Hängt aber ganz ab womit du die Daten verarbeiten willst/musst.

 

Schönes WE

MDD


Bearbeitet von MDD, 02. September 2016 - 14:35.

Wir finden für jede Lösung ein Problem

Man steckt immer in einem Sumpf voll Arbeit, nur die Tiefe ändert sich.


#13 NilsK

NilsK

    Expert Member

  • 12.346 Beiträge

 

Geschrieben 04. September 2016 - 10:10

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 von NilsK, 04. September 2016 - 10:13.

  • Cybquest gefällt das

Nils Kaczenski

MVP Cloud and Datacenter Management
... der beste Schritt zur Problemlösung: Anforderungen definieren!

Kostenlosen Support gibt es nur im Forum, nicht privat!




Auch mit einem oder mehreren der folgenden Tags versehen: MS SQL