2015-08-05 1 views
0

J'ai la requête suivante qui s'exécute dans SQL Server 2014 pour remplir une table appelée DateDimension.Comment remplir ma table de dimension de date dans SQL Server afin d'obtenir une colonne avec cette valeur spécifique?

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 

Extrait du tableau en cours, après l'exécution de la requête ci-dessus est la suivante:

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 

J'ai besoin du « quart » colonne pour afficher ses valeurs comme ci-dessous:

quarter 
    Qr 3 2000 

Il serait encore plus agréable si la colonne «quart» était laissée telle quelle et une nouvelle colonne ajoutée pour montrer ce que je recherchais. Comment puis-je faire ceci?

+1

En concaténant avec 'Qr' et l'année. Très basique. –

+0

Que demandez-vous exactement? Avez-vous un problème * spécifique *? Vous avez déjà un script qui génère des valeurs. Tout ce que vous devez faire est d'ajouter une autre colonne à la table et l'expression appropriée dans votre script. –

Répondre

0

Vous devez d'abord ajouter la colonne à la table DateDimension avant d'exécuter la requête. Ce sera une colonne 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 
+0

Super! Grandement apprécié! – user3115933