如何在 SQL 服务器中填充我的日期维度 Table 以获得具有此特定值的列?
How do I populate my Date Dimension Table in SQL Server so as to get a column with this specific value?
我在 SQL Server 2014 中运行以下查询以填充名为 DateDimension 的 table。
DECLARE @startdate datetime
DECLARE @enddate datetime
SET @startdate = '01/01/2000'
SET @enddate = '12/31/2018'
DECLARE @loopdate datetime
SET @loopdate = @startdate
WHILE @loopdate <= @enddate
BEGIN
INSERT INTO DateDimension VALUES (
Day(@loopdate),
Month(@loopdate),
Year(@loopdate),
CASE WHEN Month(@loopdate) IN (1, 2, 3) THEN 3 -- Since Financial Year starts in July, January to March is considered as Quarter 3
WHEN Month(@loopdate) IN (4, 5, 6) THEN 4
WHEN Month(@loopdate) IN (7, 8, 9) THEN 1
WHEN Month(@loopdate) IN (10, 11, 12) THEN 2
END,
@loopdate,
CONVERT(VARCHAR(10),@loopdate,111)
)
SET @loopdate = DateAdd(d, 1, @loopdate)
END
当前table的摘录,在运行之后上面的查询如下:
id Day Month Year quarter date datevarchar
1 1 1 2000 3 2000-01-01 1/1/2000
2 2 1 2000 3 2000-01-02 1/2/2000
3 3 1 2000 3 2000-01-03 1/3/2000
4 4 1 2000 3 2000-01-04 1/4/2000
5 5 1 2000 3 2000-01-05 1/5/2000
我需要 "quarter" 列来显示其值,如下所示:
quarter
Qr 3 2000
如果 "quarter" 列保持原样并添加一个新列以显示我想要的内容,那就更好了。我该怎么做?
您需要先将列添加到 DateDimension table,然后再 运行 查询。它将是一个 varchar(9) 列。
DECLARE @startdate datetime
DECLARE @enddate datetime
SET @startdate = '01/01/2000'
SET @enddate = '12/31/2018'
DECLARE @loopdate datetime
SET @loopdate = @startdate
WHILE @loopdate <= @enddate
BEGIN
INSERT INTO DateDimension VALUES (
Day(@loopdate),
Month(@loopdate),
Year(@loopdate),
CASE WHEN Month(@loopdate) IN (1, 2, 3) THEN 3 -- Since Financial Year starts in July, January to March is considered as Quarter 3
WHEN Month(@loopdate) IN (4, 5, 6) THEN 4
WHEN Month(@loopdate) IN (7, 8, 9) THEN 1
WHEN Month(@loopdate) IN (10, 11, 12) THEN 2
END,
@loopdate,
CONVERT(VARCHAR(10),@loopdate,111),
CASE WHEN Month(@loopdate) IN (1, 2, 3) THEN 'Qr 3 ' + CONVERT(VARCHAR(4),Year(@loopdate))
WHEN Month(@loopdate) IN (4, 5, 6) THEN 'Qr 4 ' + CONVERT(VARCHAR(4),Year(@loopdate))
WHEN Month(@loopdate) IN (7, 8, 9) THEN 'Qr 1 ' + CONVERT(VARCHAR(4),Year(@loopdate))
WHEN Month(@loopdate) IN (10, 11, 12) THEN 'Qr 2 ' + CONVERT(VARCHAR(4),Year(@loopdate))
END
)
SET @loopdate = DateAdd(d, 1, @loopdate)
END
我在 SQL Server 2014 中运行以下查询以填充名为 DateDimension 的 table。
DECLARE @startdate datetime
DECLARE @enddate datetime
SET @startdate = '01/01/2000'
SET @enddate = '12/31/2018'
DECLARE @loopdate datetime
SET @loopdate = @startdate
WHILE @loopdate <= @enddate
BEGIN
INSERT INTO DateDimension VALUES (
Day(@loopdate),
Month(@loopdate),
Year(@loopdate),
CASE WHEN Month(@loopdate) IN (1, 2, 3) THEN 3 -- Since Financial Year starts in July, January to March is considered as Quarter 3
WHEN Month(@loopdate) IN (4, 5, 6) THEN 4
WHEN Month(@loopdate) IN (7, 8, 9) THEN 1
WHEN Month(@loopdate) IN (10, 11, 12) THEN 2
END,
@loopdate,
CONVERT(VARCHAR(10),@loopdate,111)
)
SET @loopdate = DateAdd(d, 1, @loopdate)
END
当前table的摘录,在运行之后上面的查询如下:
id Day Month Year quarter date datevarchar
1 1 1 2000 3 2000-01-01 1/1/2000
2 2 1 2000 3 2000-01-02 1/2/2000
3 3 1 2000 3 2000-01-03 1/3/2000
4 4 1 2000 3 2000-01-04 1/4/2000
5 5 1 2000 3 2000-01-05 1/5/2000
我需要 "quarter" 列来显示其值,如下所示:
quarter
Qr 3 2000
如果 "quarter" 列保持原样并添加一个新列以显示我想要的内容,那就更好了。我该怎么做?
您需要先将列添加到 DateDimension table,然后再 运行 查询。它将是一个 varchar(9) 列。
DECLARE @startdate datetime
DECLARE @enddate datetime
SET @startdate = '01/01/2000'
SET @enddate = '12/31/2018'
DECLARE @loopdate datetime
SET @loopdate = @startdate
WHILE @loopdate <= @enddate
BEGIN
INSERT INTO DateDimension VALUES (
Day(@loopdate),
Month(@loopdate),
Year(@loopdate),
CASE WHEN Month(@loopdate) IN (1, 2, 3) THEN 3 -- Since Financial Year starts in July, January to March is considered as Quarter 3
WHEN Month(@loopdate) IN (4, 5, 6) THEN 4
WHEN Month(@loopdate) IN (7, 8, 9) THEN 1
WHEN Month(@loopdate) IN (10, 11, 12) THEN 2
END,
@loopdate,
CONVERT(VARCHAR(10),@loopdate,111),
CASE WHEN Month(@loopdate) IN (1, 2, 3) THEN 'Qr 3 ' + CONVERT(VARCHAR(4),Year(@loopdate))
WHEN Month(@loopdate) IN (4, 5, 6) THEN 'Qr 4 ' + CONVERT(VARCHAR(4),Year(@loopdate))
WHEN Month(@loopdate) IN (7, 8, 9) THEN 'Qr 1 ' + CONVERT(VARCHAR(4),Year(@loopdate))
WHEN Month(@loopdate) IN (10, 11, 12) THEN 'Qr 2 ' + CONVERT(VARCHAR(4),Year(@loopdate))
END
)
SET @loopdate = DateAdd(d, 1, @loopdate)
END