簡體   English   中英

如何在SQL Server中填充日期維度表,以便獲得具有此特定值的列?

[英]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的表。

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

運行上述查詢后,當前表的提取如下:

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
  Qr 3 2000

如果將“ quarter”列保持原樣,並添加一個新列以顯示我要執行的操作,那就更好了。 我怎樣才能做到這一點?

在運行查詢之前,您需要先將該列添加到DateDimension表上。 這將是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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM