Werte in neue Zeile weiterschreiben

Falkenauge82

Neuer Benutzer
Beiträge
2
Hallo zusammen

Ich bin relativ neu im Bereich MS SQL und ich hoffe meine Überschrift trifft das Thema.

Ich habe nach einer Lösung dieses Problems schon im Internet gesucht, allerdings noch nichts gefunden. Ich hoffe ihr könnt mir helfen.
Wir haben SQL Server 2005 im Einsatz.

Ich versuche für unseren Lagerbestand eine Historie bereitzustellen. Leider gibt es Artikel die nicht jeden Monat eine Bewegung ausweisen, in diesen Perioden wird eine "0" angegeben. Jedoch haben diese Artikel einen Bestand.

Meine Frage ist jetzt, gibt es eine Möglichkeit dies mit einem SQL Befehl so hinzubekommen, das die Zeilen mit "0" , wie z. B. die Periode "201301" mit dem letzten gültigen Wert, in diesem Fall "6" abzufüllen?
Beispiel.png
 
Werbung:

akretschmer

Datenbank-Guru
Beiträge
9.028
Meine Frage ist jetzt, gibt es eine Möglichkeit dies mit einem SQL Befehl so hinzubekommen, das die Zeilen mit "0" , wie z. B. die Periode "201301" mit dem letzten gültigen Wert, in diesem Fall "6" abzufüllen?
Anhang anzeigen 215

In PostgreSQL z.B. so:

Code:
test=# select id, val from foo ;
 id | val
----+-----
  1 |   2
  2 |   4
  3 |   6
  4 |   0
  5 |   2
  6 |   5
  7 |   3
  8 |   9
  9 |   0
 10 |   8
 11 |   3
 12 |   0
 13 |   6
(13 rows)

test=*# select id, case when val = 0 then lag(val) over (order by id) else val end as val from foo ;
 id | val
----+-----
  1 |   2
  2 |   4
  3 |   6
  4 |   6
  5 |   2
  6 |   5
  7 |   3
  8 |   9
  9 |   9
 10 |   8
 11 |   3
 12 |   3
 13 |   6
(13 rows)

Ich denke mal, das könnte in M$SQL ähnlich gehen.
 

Falkenauge82

Neuer Benutzer
Beiträge
2
Hallo akretschmer

Erstmal vielen Dank für deine schnelle Antwort.

So wie ich das sehe würde das allerdings nur einen Wert mit "0" gehen, leider habe ich aber mehrere Perioden die keine Bewegungen haben, siehe in meinem Beispiel Periode 201010 bis Periode 201012, in diesen müssten jeweils eine Menge von "1" stehen.
 

akretschmer

Datenbank-Guru
Beiträge
9.028
Hallo akretschmer

Erstmal vielen Dank für deine schnelle Antwort.

So wie ich das sehe würde das allerdings nur einen Wert mit "0" gehen, leider habe ich aber mehrere Perioden die keine Bewegungen haben, siehe in meinem Beispiel Periode 201010 bis Periode 201012, in diesen müssten jeweils eine Menge von "1" stehen.


Das könnte man, denke ich mal, rekursiv machbar sein. Als Abbruch-Bedingung prüfen, ob noch 0 vorkommt. Bin nur grad zu faul für ein Beispiel...
 

akretschmer

Datenbank-Guru
Beiträge
9.028
Das könnte man, denke ich mal, rekursiv machbar sein. Als Abbruch-Bedingung prüfen, ob noch 0 vorkommt. Bin nur grad zu faul für ein Beispiel...


Hrm, rekursive ist vielleicht doch nicht soo einfach, aber eine Function ist kein Thema. Solange das obige ausführen, bis keine 0 mehr vorkommt ;-)
 
Werbung:

ukulele

Datenbank-Guru
Beiträge
4.394
Möchtest du nur zur aktuellsten Periode alle Bestände auflisten oder für jeden Artikel in jeder Periode den Bestand haben?
Sollen die Einträge in die Datenbank geschrieben werden oder soll das ganze nur in der Ausgabe angezeigt werden?
Und am wichtigsten: Was machst du bei Beständen die wirklich mal 0 sind? Ist 0 kein gültiger Bestand?
 
Oben