Wenn Sie keine Nummerntabelle haben, können Sie mit Systemtabellen eine Liste von sequentiellen Zahlen im laufenden Fliegen erstellen:
z.B
SELECT Number = ROW_NUMBER() OVER(ORDER BY object_id)
FROM sys.all_objects;
Wenn Sie dies für weitere Zahlen erweitern müssen, können Sie Join -Tabellen überschreiten:
SELECT Number = ROW_NUMBER() OVER(ORDER BY a.object_id)
FROM sys.all_objects a
CROSS JOIN sys.all_objects b;
Dann müssen Sie diese Anzahl von Wochen nur von Ihrem Startdatum hinzufügen/subtrahieren:
DECLARE @Monday DATE = DATEADD(WEEK, DATEDIFF(WEEK, 0, GETDATE()), 0);
WITH Numbers AS
( SELECT Number = ROW_NUMBER() OVER(ORDER BY object_id)
FROM sys.all_objects
)
SELECT WeekNumber = DATEPART(ISO_WEEK, w.DateMonday),
w.DateMonday
FROM ( SELECT DateMonday = DATEADD(WEEK, - n.Number, @Monday)
FROM Numbers n
) w;
Dies ist eine ausführliche Möglichkeit, dies für Schritt für Schritt zu tun. Die Klarheit kann er kondensiert werden:
SELECT WeekNumber = DATEPART(ISO_WEEK, w.DateMonday),
w.DateMonday
FROM ( SELECT DateMonday = DATEADD(WEEK, DATEDIFF(WEEK, 0, GETDATE()) - ROW_NUMBER() OVER(ORDER BY object_id), 0)
FROM sys.all_objects
) w;
Aaron Bertrand hat einige ausführliche Vergleichsweisen durchgeführt, um sequentielle Listen von Zahlen zu generieren:
- Generieren Sie einen Satz oder eine Sequenz ohne Schleifen - Teil 1
- Generieren Sie einen Satz oder eine Sequenz ohne Schleifen - Teil 2
- Generieren Sie einen Satz oder eine Sequenz ohne Schleifen - Teil 3
Natürlich wäre der einfachste Weg, dies zu tun, um a zu erstellen Kalendertisch