Willkommen bei Entwickler-Forum.
Ergebnis 1 bis 5 von 5
  1. #1
    Neuer Benutzer
    Registriert seit
    18.01.2013
    Beiträge
    9

    Standard While-Schleife mit mehreren Bedingungen

    Hallo zusammen,

    ich hoffe jemand kann mir beim folgenden MS SQL Problem weiterhelfen.

    Ich versuche die Spalte (B) basierend auf den Werten in Spalte (A) zu berechnen. Mit einer anschließenden Generierung einer Eindeutigen ID in Spalte (C).

    Beispiel:
    RowID A B C
    1 2 1 32568957
    2 5 2 32568957
    3 2 3 32568957
    4 30 4 32568957
    5 9 1 45856267
    6 5 2 45856267
    7 7 3 45856267
    8 256 4 45856267
    9 15 1 895101299
    10 5 2 895101299

    Die Bedingung für Spalte B lautet:

    Solange der Wert in Spalte A < 30 ist, dann soll in Spalte B fleißig weiter hochgezählt werden und eine eindeutige ID in Spalte C generiert werden.
    Bei nicht Erfüllung der Bedingung soll in der darunterliegenden Zeile wieder von neu gezählt werden.

    Kann mir hier jemand behilflich sein?

    Das wäre Klasse! Vielen Dank im Vorraus!
    Gruß
    Geändert von Donsk (15.07.2016 um 11:04 Uhr)

  2. #2
    Stammgast
    Registriert seit
    24.10.2011
    Beiträge
    1.264

    Standard

    Zitat Zitat von Donsk Beitrag anzeigen
    Ich versuche die Spalte (B) basierend auf den Werten in Spalte (A) zu berechnen. Mit einer anschließenden Generierung einer Eindeutigen ID in Spalte (C).

    ..snipp..

    Bei nicht Erfüllung der Bedingung soll in der darunterliegenden Zeile wieder von neu gezählt werden.
    Kann es sein, dass die Berechnung nicht wirklich eine Berechnung ist, sondern ein Ranking?
    Dann " .. in der daraunter liegenden Zeile .. "
    Das ist erstmal - sagen wir Excel Style -, soetwas gibt es in SQL nicht. Es gibt Sortierung, aber zunächst nur für die Ausgabe.
    Was Du brauchst, denn da gibt es zwangsläufig auch "darunter" usw. sind Window oder Analytic Funktionen und was dem Beispiel fehlt ist mindestens die Spalte, nach der sortiert werden soll.

    P.S: Bei MS SQL kommt es auf die Version an, was Dir an Window Funktionen zur Verfügung steht, je neuer, desto besser.
    Gruß, defo

  3. #3
    Neuer Benutzer
    Registriert seit
    18.01.2013
    Beiträge
    9

    Standard

    Hi Defo,

    ja, es existiert eine sortierte Spalte in der Tabelle. Hab diese mal Beispielhaft hinzugefügt. Aktuell verwende ich die DEV 2012er Version.

    Gruß

  4. #4
    Neuer Benutzer
    Registriert seit
    18.01.2013
    Beiträge
    9

    Standard

    Zitat Zitat von defo Beitrag anzeigen
    ...
    Was Du brauchst, denn da gibt es zwangsläufig auch "darunter" usw. sind Window oder Analytic Funktionen und was dem Beispiel fehlt ist mindestens die Spalte, nach der sortiert werden soll.
    Ok, das Thema mit der "darunterliegenden Spalte" könnte man ja auch anders lösen. Es würde doch auch reichen, wenn der Wert in Spalte B nicht kleiner als 30 ist, eine 0 gesetzt wird. Und ja du hast natürlich recht. Eine Berechnung ist es nicht, sondern ein rank().



    RowID A B C
    1 2 1 32568957
    2 5 2 32568957
    3 2 3 32568957
    4 30 4 32568957
    5 9 1 45856267
    6 5 2 45856267
    7 7 3 45856267
    8 256 4 45856267
    9 15 1 895101299
    10 5 2 895101299

    Das würde auch erstmal reichen.

    Dann wäre doch das Thema mit den Window Funktionen vom Tisch oder was meinst du?

    Gruß
    Geändert von Donsk (19.07.2016 um 00:02 Uhr)

  5. #5
    Stammgast
    Registriert seit
    24.10.2011
    Beiträge
    1.264

    Standard

    Zitat Zitat von Donsk Beitrag anzeigen
    ..
    Das würde auch erstmal reichen.
    Dann wäre doch das Thema mit den Window Funktionen vom Tisch oder was meinst du?
    Naja nicht wirklich, was das bloße Auge an Deiner Liste intuitiv wahrnimmt, ist ja nichts anderes als die Feststellung, dass bei bestimmten Kriterien eine fortlaufende Zählung neu bei 0 beginnt und korrespondierend eine Gruppen ID erzeugt wird. Eine gleichmäßig aufsteigende Zahl kann man aber per SQL nicht erzeugen, wenn man nicht den Wert der Zahl darunter bzw. darüber kennt (auoinc ist nicht das gleiche) und so ist man wieder bei den Window Functions. (die im Übrigen dafür gemacht sind)
    Warum nimmst Du das nicht? Was ist mit deinem Server, ein 2000er oder noch älter?
    Alternativ macht man sowas in einem Reporting Tool. In MySQL kann man zum Merken der Zahlen (Stichwort darunter / darüber) Variablen nutzen, vielleicht gibt es sowas auch für MSSQL. In anderen Systemen gibt es eben Window Functions.

    Um in die Richtung zu kommen, brauchst Du mit "reinem" SQL ein Selfjoin mit Sortierung und TOP 1. Wenn Du das mit größeren Datenmengen machen musst, wird es dauern. Bei ein paar hundert Datensätzen ist es wahrscheinlich einigermaßen flott.
    Gruß, defo

 

 

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •