Repository navigation
Expand file tree
/
Copy pathssms_temp_procedure_temp_table_sql.txt
More file actions
83 lines (68 loc) · 2.36 KB
/
Copy pathssms_temp_procedure_temp_table_sql.txt
File metadata and controls
83 lines (68 loc) · 2.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
IF OBJECT_ID('tempdb..#CheckDayOfWeek', 'P') IS NOT NULL
DROP PROCEDURE #CheckDayOfWeek;
GO
-- create temporary procedure to check if day is odd or even
CREATE PROCEDURE #CheckDayOfWeek (@TableName NVARCHAR(128), @DateColumn NVARCHAR(128))
AS
BEGIN
DECLARE @SQL NVARCHAR(MAX);
-- Add a new column to store 'Odd' or 'Even' for the specified table
SET @SQL = 'IF NOT EXISTS (SELECT * FROM sys.columns
WHERE object_id = OBJECT_ID(''' + @TableName + ''')
AND name = ''DayType'')
BEGIN
ALTER TABLE ' + QUOTENAME(@TableName) + ' ADD DayType VARCHAR(10);
END';EXEC sp_executesql @SQL;
-- Update the DayType column based on whether the day of the week is odd or even
SET @SQL = '
UPDATE ' + QUOTENAME(@TableName) + '
SET DayType =
CASE
WHEN DATEPART(WEEKDAY, ' + QUOTENAME(@DateColumn) + ') % 2 = 0 THEN ''Even''
ELSE ''Odd''
END;';
EXEC sp_executesql @SQL;
END;
GO
DROP TABLE IF EXISTS #abc;
CREATE TABLE #abc
(
ID INT IDENTITY(1,1) PRIMARY KEY,
RandomText VARCHAR(50),
RandomNumber1 INT NOT NULL,
RandomNumber2 INT NOT NULL,
dater DATETIME NOT NULL, -- or can be DATE
nxt_date DATETIME NOT NULL
);
--ALTER TABLE #abc
--ADD dater VARCHAR;
--UPDATE #abc SET dater = '1900-01-01'
DECLARE @i INT = 1;
DECLARE @StartDate DATETIME = '2020-01-01';
DECLARE @EndDate DATETIME = '2021-01-01';
WHILE @i <= 100
BEGIN
INSERT INTO #abc (RandomText, RandomNumber1, RandomNumber2, dater, nxt_date)
VALUES
(
LEFT(NEWID(),5),
FLOOR(RAND()*100)+1,
FLOOR(RAND()*100)+1,
-- generate a random date between the two dates
DATEADD(DAY, FLOOR(RAND()*DATEDIFF(DAY,@StartDate,@EndDate)),@StartDate),
-- generate incremental date from StartDate
DATEADD(DAY,@i,@StartDate)
);
SET @i=@i+1;
END
-- use the procedure - adds a column called DayType
EXEC #CheckDayOfWeek @TableName = '#abc', @DateColumn = 'nxt_date';
SELECT *, SUM(z.nxt_rnd_nm1) as sum_nxt_rnd_nm1
FROM(
SELECT *, LEAD(RandomNumber1,1,0) OVER(ORDER BY ID) AS nxt_rnd_nm1
FROM #abc
) z
GROUP BY z.ID, z.RandomText, z.RandomNumber1, z.RandomNumber2, z.dater, z.nxt_date, z.DayType, z.nxt_rnd_nm1
HAVING SUM(z.nxt_rnd_nm1) > 50
DROP PROCEDURE #CheckDayOfWeek;
DROP TABLE #abc