Announcement

Collapse
No announcement yet.

While-Schleife mit Bedingung

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • While-Schleife mit Bedingung

    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ß
    Zuletzt editiert von Donsk; 15.07.2016, 11:04.

  • #2
    Originally posted by Donsk View Post
    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

    Comment


    • #3
      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ß

      Comment


      • #4
        Originally posted by defo View Post
        ...
        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ß
        Zuletzt editiert von Donsk; 19.07.2016, 00:02.

        Comment


        • #5
          Originally posted by Donsk View Post
          ..
          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

          Comment

          Working...
          X