إذا لم يكن لديك جدول أرقام ، فيمكنك إنشاء قائمة بالأرقام المتسلسلة على الطيران باستخدام جداول النظام:
على سبيل المثال
SELECT Number = ROW_NUMBER() OVER(ORDER BY object_id)
FROM sys.all_objects;
إذا كنت بحاجة إلى تمديد هذا للحصول على المزيد من الأرقام ، يمكنك عبور الجداول:
SELECT Number = ROW_NUMBER() OVER(ORDER BY a.object_id)
FROM sys.all_objects a
CROSS JOIN sys.all_objects b;
ثم تحتاج فقط إلى إضافة/طرح هذا العدد من الأسابيع من تاريخ البدء الخاص بك:
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;
هذه طريقة مطوّلة للقيام بذلك من أجل وضوح خطوة بخطوة ، يمكن تكثيفها إلى:
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;
هارون برتراند قام ببعض المقارنات المتعمقة طرق لتوليد قوائم متسلسلة من الأرقام:
- قم بإنشاء مجموعة أو تسلسل بدون حلقات - الجزء 1
- قم بإنشاء مجموعة أو تسلسل بدون حلقات - الجزء 2
- قم بإنشاء مجموعة أو تسلسل بدون حلقات - الجزء 3
بالطبع ستكون أسهل طريقة للقيام بذلك هي إنشاء ملف جدول التقويم