Kalendarische Ergebnismenge aus zwei Definitionstabellen

27/01/2010 - 11:34 von Jan Waiz | Report spam
Hi All,

ich habe zwei Tabellen:

[RegularDates]
DayofWeek Content
== =1 Montags gehen wir immer Essen
2 Dienstags machen wir Sport
3 Mittwoch spielen wir eine Runde Skat
4 Donnerstag gehen wir Schwimmen
5 Freitag ist Kino angesagt
6 Samstag machen wir frei
7 Sonntag gehen wir in die Kirche

[SpecialDates]
Date Content
== .02.2010 Essen fàllt heute aus
04.02.2010 Schwimmen heute eine Stunde früher

Die Ergebnismenge soll nun einen kalendarischen Zeitraum abbilden - zum
Beispiel eine kalendarische Übersicht was im Februar alles anliegt:

Datum Wochentag Vorgaben
== == =.02.2010 Montag Essen fàllt heute aus
02.02.2010 Dienstag Dienstags machen wir Sport
03.02.2010 Mittwoch Mittwoch spielen wir eine Runde Skat
04.02.2010 Donnerstag Schwimmen heute eine Stunde früher
05.02.2010 Freitag Freitag ist Kino angesagt
06.02.2010 Samstag Samstag machen wir frei
07.02.2010 Sonntag Sonntag gehen wir in die Kirche
08.02.2010 Montag Montags gehen wir immer Essen
09.02.2010 Dienstag Dienstags machen wir Sport
10.02.2010 Mittwoch Mittwoch spielen wir eine Runde Skat
11.02.2010 Donnerstag Donnerstag gehen wir Schwimmen
12.02.2010 Freitag Freitag ist Kino angesagt
13.02.2010 Samstag Samstag machen wir frei
14.02.2010 Sonntag Sonntag gehen wir in die Kirche
...
...

Ich hoffe das Prinzip ist klar. Anhand der Vorgabe in [Regular Dates] sollen
die Eintràge kalendarisch umgesetzt werden, wobei der Wochtag das
entsprechende Datum ersetzt. Sind für ein Datum Eintràge in der [Special
Dates] Eintràge, dann ersetzen diese für den betreffenden tag den
entsprechenden Standardeintrag.

Ich habe keinen rechten Ansatz, wie ich das per SQL umsetzen könnte. Jemand
von Euch eine Idee?

TIA
 

Lesen sie die antworten

#1 Stefan Hoffmann
27/01/2010 - 11:55 | Warnen spam
hallo Jan,

On 27.01.2010 11:34, Jan Waiz wrote:
Ich hoffe das Prinzip ist klar. Anhand der Vorgabe in [Regular Dates]
sollen die Eintràge kalendarisch umgesetzt werden, wobei der Wochtag das
entsprechende Datum ersetzt. Sind für ein Datum Eintràge in der [Special
Dates] Eintràge, dann ersetzen diese für den betreffenden tag den
entsprechenden Standardeintrag.

Ich habe keinen rechten Ansatz, wie ich das per SQL umsetzen könnte.
Jemand von Euch eine Idee?


Am einfachsten mit einer CTE, siehe

http://www.kodyaz.com/articles/sql-...table.aspx


mfG

USE tempdb ;
GO

SET DATEFIRST 1 ;
GO

CREATE TABLE RegularDates
(
[DayOfWeek] INT NOT NULL
PRIMARY KEY,
Content NVARCHAR(255) NOT NULL
) ;
CREATE TABLE SpecialDates
(
[Date] DATE NOT NULL,
Content NVARCHAR(255) NOT NULL
) ;
GO

INSERT INTO RegularDates ( [DayOfWeek], Content )
VALUES ( 1, N'Mo' ),
( 2, N'Di' ),
( 3, N'Mi' ),
( 4, N'Do' ),
( 5, N'Fr' ),
( 6, N'Sa' ),
( 7, N'So' ) ;
INSERT INTO SpecialDates ( [Date], Content )
VALUES ( GETDATE( ), N'Special' ) ;
GO

SELECT *
FROM RegularDates ;
SELECT *
FROM SpecialDates ;

WITH CTE_DatesTable
AS ( SELECT CAST('20100125' AS DATETIME) AS [Date]
UNION ALL
SELECT DATEADD(dd, 1, [Date])
FROM CTE_DatesTable
WHERE DATEADD(dd, 1, [Date]) <= '20100131'
)
SELECT C.[Date],
R.Content,
S.Content,
ISNULL(S.Content, R.Content) AS ActiveContent
FROM CTE_DatesTable C
INNER JOIN RegularDates R ON R.[DayOfWeek] =
DATEPART(WEEKDAY, C.[Date])
LEFT JOIN SpecialDates S ON S.[Date] = C.[Date]
OPTION ( MAXRECURSION 0 ) ;


DROP TABLE RegularDates ;
DROP TABLE SpecialDates ;
GO

Ähnliche fragen