Advertisement
Guest User

Untitled

a guest
Oct 23rd, 2019
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.61 KB | None | 0 0
  1. USE YOURDB;
  2.  
  3. CREATE TABLE DBO.RETAIL_454_CALENDAR (RETAIL_DATE DATE, RETAIL_WEEK INT, RETAIL_YEAR INT);
  4. TRUNCATE TABLE DBO.RETAIL_454_CALENDAR;
  5.  
  6. /* Do not pick an arbitrary start date. This script relies on the correct start date for Retail year 2012 */
  7. DECLARE @BEGIN_DATE date = '29-Jan-2012'
  8. DECLARE @END_DATE DATE = '01-May-2090'
  9. DECLARE @WEEK_START_DATE DATE = @BEGIN_DATE;
  10. DECLARE @DATES_TABLE TABLE (DT DATE);
  11. DECLARE @JAN_DAYS_COUNT INT;
  12. DECLARE @RETAIL_WEEK_NUMBER INT = 1;
  13. DECLARE @RETAIL_YEAR INT = DATEPART(YEAR, @BEGIN_DATE);
  14.  
  15. BEGIN
  16. SET NOCOUNT ON;
  17. WHILE @BEGIN_DATE <= @END_DATE
  18. BEGIN
  19.  
  20. IF @RETAIL_WEEK_NUMBER = 54
  21. BEGIN
  22. SET @RETAIL_WEEK_NUMBER = 1;
  23. SET @RETAIL_YEAR = @RETAIL_YEAR + 1;
  24. END;
  25.  
  26. /*Load 7 days */
  27. WITH DT_CTE AS (
  28. SELECT CAST(@BEGIN_DATE AS DATE) AS DT, 1 AS date_number
  29. UNION ALL
  30. SELECT DATEADD(DAY, 1, DT), DATE_NUMBER + 1
  31. FROM DT_CTE
  32. WHERE DATE_NUMBER < 7
  33. )
  34. INSERT INTO @DATES_TABLE
  35. SELECT DT FROM DT_CTE
  36. ORDER BY DT asc;
  37.  
  38. IF @RETAIL_WEEK_NUMBER = 53
  39. BEGIN
  40. SELECT @JAN_DAYS_COUNT = COUNT(*) FROM @DATES_TABLE WHERE DATEPART(MM,DT) = 1;
  41.  
  42. IF @JAN_DAYS_COUNT < 4
  43. BEGIN
  44. PRINT 'There were less than 4 days of Jan in week 53. Retail week number set to 1';
  45. SET @RETAIL_WEEK_NUMBER = 1
  46. SET @RETAIL_YEAR = @RETAIL_YEAR + 1;
  47. END;
  48. ELSE
  49. BEGIN
  50. PRINT @RETAIL_YEAR;
  51. PRINT 'There were more than 4 days of Jan in week 53. Adding week 53';
  52. END;
  53.  
  54. END;
  55.  
  56. INSERT INTO DBO.RETAIL_454_CALENDAR
  57. SELECT DT, @RETAIL_WEEK_NUMBER, @RETAIL_YEAR FROM @DATES_TABLE;
  58.  
  59. SET @BEGIN_DATE = DATEADD(DAY, 7, @BEGIN_DATE);
  60. SET @RETAIL_WEEK_NUMBER = @RETAIL_WEEK_NUMBER + 1;
  61. DELETE FROM @DATES_TABLE;
  62.  
  63. END;
  64.  
  65. END;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement