View mit aufgefüllten Datensätzen

14/11/2007 - 15:53 von Jochen Rieseberg | Report spam
Hallo zusammen,

vielleicht hat jemand eine Idee zu folgendem Problem:
Ich habe eine Tabelle mit Werten und einem Gültigab-Datum, etwa so:
Wert Datum_ab
==¡ 01.01.2007
B1 01.02.2007
A2 01.05.2007
Aa 01.06.2007
...

Mit einer View nun sollen solange die gleichen Werte angezeigt werden, bis
ein neuer Wert mit neuem Gültigab-datum eingestellt wird, also

Wert Datum_ab
==¡ 01.01.2007
B1 01.02.2007
B1 01.03.2007
B1 01.04.2007
A2 01.05.2007
Aa 01.06.2007

Wàr' ganz einfach, habe ich gedacht, mir ist aber blöderweise die Lösung
noch nicht eingefallen.

Jochen Rieseberg
http://www.rieseberg.de
 

Lesen sie die antworten

#1 Michael Monarch
14/11/2007 - 20:20 | Warnen spam
Hallo Jochen

mach mal folgendes (geht vielleicht einfacher aber probier es trotzdem mal):
1) Erstelle Tabelle (Name: aaatest) mit folgenden Werten

Wert Datum Info
¡ 01.01.2007 Kein guter Tag
B1 01.02.2007 Guter Tag
A2 01.05.2007 Geht so der Tag
Aa 01.06.2007 Den Tag kannst du vergessen

2) Erstelle Query oder procedure mit folgendem Code

declare @userJahr as bigint
set @userJahr 07

declare @userdatum as datetime

set datefirst 1

set @userdatum='01.01.' + cast(@userjahr as char(4))

select
CONVERT(char, @userdatum, 104) as Datum,year(@userdatum) as
jahr,month(@userdatum) as monat,day(@userdatum) as
tag,datepart(dayofyear,@userdatum) as TagJahr,datepart(weekday,@userdatum) as
TagWoche,dbo.isoweek(@userdatum) as woche ,' ' as FKey
into xkalender

while year(@userdatum)=@userJahr
begin
insert into xkalender(Datum,jahr,monat,tag,tagJahr,tagWoche,woche,fkey)
SELECT TOP (1) CONVERT(char, @userdatum,
104),year(@userdatum),month(@userdatum),day(@userdatum),datepart(dayofyear,@userdatum),datepart(weekday,@userdatum),dbo.isoweek(@userdatum),Wert
FROM dbo.aaatest
WHERE (Datum <= CONVERT(DATETIME, @userdatum, 102))
ORDER BY Datum DESC
set @userdatum=dateadd(day,1,@userdatum)
end

SELECT dbo.xkalender.Datum, dbo.aaatest.Wert, dbo.aaatest.Info
FROM dbo.aaatest INNER JOIN
dbo.xkalender ON dbo.aaatest.Wert = dbo.xkalender.FKey

drop table xkalender


Wie du siehst wird ein Kalender erstellt, welcher über ein ganzes Jahr geht.
Die Folge ist klar; alle Tage bis zum 31.12.2007 werden mit 'Aa' entsprechend
gefüllt. Es ist daher ratsam entweder beim Aufruf entsprechende
Datumseinschrànkungen vorzunehmen oder in dem Query den letzten Datumswert in
eine Variable einzulesen und als Ausstieg(Break) in der While-Schleife zu
benutzen.
Desweiteren, ist in diesem Beispiel eine echte Kalendertabelle erstellt
worden, besser ist es diese temporàr zu erstellen.

mfg michael monarch

Ähnliche fragen