Merge zweier Table-Variablen

kraeppy

Benutzer
Beiträge
11
guten morgen,

für produkte gibt es forecasts, diese werden als datei 2-3x am tag heruntergeladen und die informationen in die datenbank importiert.
leider ist die logik für die tabelle, in die diese werte geschrieben, so, dass nur die neuesten daten als "richtig" anerkannt werden, die vorhandenen verschwinden dann in eine history-tabelle.
zu einem produkt und einem tag werden jeweils 100 Viertelstundenwerte gespeichert. (100 wegen zeitumstellung).

abgespecktes beispiel:
datei 1: 30.6.2016 hat einen forecast von 10:00 - 18:00
datei 2: 30.6.2016 hat einen forecast von 14:00-22:00.

problem ist, dass durch den import der neuen datei die informationen von 10:00-14:00 nicht mehr vorhanden sind (nur noch in der history-tabelle).

jetzt wollte ich hergehen und folgende abfrage schreiben:

in zwei table-variablen (target = aktuelle tabelle, source = history) die daten für die produkte, die mich interessieren, ablegen und mit einem mergebefehl die alten daten aus history-tabelle zu den neuen hinzufügen mit der logik: "wenn der neue viertelstunden-forecast = 0, dann nimm den alten, ansonsten den neuen".

Code:
merge @prices as _target
using @prices_hist as _source
on
(
        _target.product_id = _source.product_id
    and _target.trading_day = _source.trading_day
    and _target.date_from = _source.date_from
    and _target.date_to = _source.date_to
)
when matched then
update set
      _target.val_1 = case _source.val_1 when 0 then _target.val_1 else _source.val_1 end,
      ...
  _target.val_100 = case _source.val_100 when 0 then _target.val_100 else _source.val_100 end

when not matched then
insert ([product_id],  [trading_day], [date_from], [date_to], [price], [val_1],..., [val_99], [val_100])
values (1,  getdate(), getdate(), getdate(), 1, 1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1);

select * from @prices

zum schluss mit dem insert 1,1,1,1,..... hab ich nur aus testzwecken gemacht.

beim letzten select * from @prices hab ich jetzt erwartet, dass die tabelle mit den alten werten aktualisiert wurde... wurde sie aber nicht und ich versteh grad nicht warum :-?

die daten in den feldern, die in dem on-block stehen, sind alle gleich. da habe ich fünf mal drauf geachtet ^^

wenn mir jemand weiterhelfen kann, wär lieb :)

grüße und frohes schaffen

kraeppy
 
Werbung:
Werbung:
ich bin so dusselig -.-

beim insert in die history-table-variable ist mir ein tippfehler bei der produkt-id unterlaufen weshalb kein match statt fand -.-
da hat mich gerade ein kollege drauf hingewiesen...

sry für die umstände.

lg kraeppy
 
Zurück
Oben