Announcement

Collapse
No announcement yet.

Datensatz pro Monat in Zeitraum erzeugen

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

  • Datensatz pro Monat in Zeitraum erzeugen

    Hallo zusammen,

    ich hab folgendes Problem... Ich bräuchte für jeden Monat in einem Zeitraum einen Datensatz.

    Ich habe eine Tabelle in der zwei Datumsangabe stehen (Beginn und Ende). Beginn ist immer befüllt. In einer zweiten Tabelle würde ich gerne für jeden Monat zwischen Beginn und Ende einen Datensatz anlegen.

    Beispiel:

    Tabelle_eins
    ID Beginn Ende
    1 1.1.1900 1.5.1900
    2 1.2.1900 1.7.1901

    Daraus soll folgendes werden

    Tabelle_zwei
    ID_Tab_eins Periode
    1 190001
    1 190002
    1 190003
    1 190004
    2 190002
    2 190003
    2 190004
    und so weiter

    Mit datediff bekomme ich die Anzahl der Monat zwischen Beginn und Ende heraus, soweit klar. Was mir nicht klar ist, ist zum einen wie baue ich eine Schleife und wie sieht ein INSERT mit Variablen aus.

    Es müßte ja irgendwie so aussehen:

    Eine Variable in die ich die Monate reinschreibe
    Eine Schleife, die hochzählt
    Dann müßte ich die Periode berechnen, also Beginn plus Schleifenzähler (in Monaten)
    Dann ein INSERT in die zweite Tabelle

    Oder bin ich komplett auf dem Holzweg?

  • #2
    Für das Ganze brauchst du sowie ein Script (stored proc), weil es mit einem einzelen Befehl nicht geht.
    Und das könnte etwa so aussehen:
    Code:
    declare
      @id   int,
      @monat  smalldatetime,
      @ende   smalldatetime
    declare cur1 cursor for select id, beginn, ende from tabelle_eins
    
    open cur1
    fetch next from cur1 into @id, @monat, @ende
    while @@fetch_status = 0 begin
      @monat = dateadd(m, 1, @monat)
      while @monat < @ende begin
        insert into tabelle_zwei(ID_Tab_eins, Periode) values (@id, convert(char(6), @monat, 112))
       @monat = dateadd(m, 1, @monat)
      end
      fetch next from cur1 into @id, @monat, @ende
    end
    close cur1
    deallocate cur1
    ... allles ungetestet, eh klar

    bye,
    Helmut

    Comment

    Working...
    X