Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Werte in neue Zeile weiterschreiben

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von Falkenauge82, 23 Juli 2013.

  1. Falkenauge82

    Falkenauge82 Neuer Benutzer

    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
     
  2. akretschmer

    akretschmer Datenbank-Guru

    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.
     
  3. Falkenauge82

    Falkenauge82 Neuer Benutzer

    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.
     
  4. akretschmer

    akretschmer Datenbank-Guru


    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...
     
  5. akretschmer

    akretschmer Datenbank-Guru


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

    ukulele Datenbank-Guru

    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?
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden