0
votes

Comment puis-je ajouter cette nouvelle colonne personnalisée à la sortie de ma requête?

J'utilise SQL Server 2014 et j'ai la requête T-SQL suivante:

    Date          Period       Day
    -------------------------------
    2016-07-01    FY 16-17     D1
    2016-07-02    FY 16-17     D2
    2016-07-03    FY 16-17     D3
    ...           ...          ...
    2017-07-01    FY 17-18     D1
    2017-07-02    FY 17-18     D2
    2017-07-03    FY 17-18     D3
    ...           ...          ...
    2018-07-01    FY 18-19     D1
    2018-07-02    FY 18-19     D2
    2018-07-03    FY 18-19     D3
    ...           ...          ...


1 commentaires

Vous sélectionnez à partir d'une table appelée daturdimension . Je m'attendrais à ce que ce tableau contienne déjà des colonnes liées à la date telles que l'année financière de la date actuelle appartenance à ce jour et quel jour il est dans cet exercice ...


5 Réponses :


-1
votes

Utilisez Row_Number () CODE>

with cte as
(
 SELECT [Date]
,(CASE WHEN [Date] between '2016-07-01' and '2017-06-30' THEN 'FY 16-17'
      WHEN [Date] between '2017-07-01' and '2018-06-30' THEN 'FY 17-18'
      WHEN [Date] between '2018-07-01' and '2019-06-30' THEN 'FY 18-19'
      ELSE 'Not Stated'
      END) as [Period]
FROM DateDimension
)

select *,concat('D',row_number() over(partition by period order by date)) as DayNo
    from cte


2 commentaires

Il semble que vous manquiez le point que vous devez commencer à compter le 1er juillet.


En outre, une seule journée manquante dans la table tourne Row_Number () dans la citrouille.



0
votes

Vous pouvez utiliser datrodiff code> pour avoir la différence entre le début de l'exercice et [date] code>.

SELECT 

[Date]
,(CASE WHEN [Date] between '2016-07-01' and '2017-06-30' THEN 'FY 16-17'
  WHEN [Date] between '2017-07-01' and '2018-06-30' THEN 'FY 17-18'
  WHEN [Date] between '2018-07-01' and '2019-06-30' THEN 'FY 18-19'
  ELSE 'Not Stated'
  END) as [Period]
, CASE WHEN [Date] < DATEFROMPARTS(DATEPART(Year, GETDATE()), 7, 1)
       THEN CONCAT('D', (DATEDIFF(DAY, DATEFROMPARTS(DATEPART(Year, [Date]) - 1, 7, 1), [Date] + 1)))
       ELSE CONCAT('D', (DATEDIFF(DAY, DATEFROMPARTS(DATEPART(Year, [Date]), 7, 1), [Date] + 1)))
  END AS [Day]

FROM DateDimension

WHERE [Date] between '2016-07-01' and '2019-06-30'


0 commentaires

0
votes

Voici un exemple de la manière dont vous pouvez simplifier votre calcul de l'exercice existant et obtenir le jour de l'exercice:

declare @date date = '20190702';

select year(dateadd(month, -6, @date)) as [FY],
  datediff(day, datefromparts(year(dateadd(month, -6, @date)), 6, 30), @date) as [DOFY];


0 commentaires

0
votes

Vous pouvez utiliser datrodiff code> pour calculer le nombre de jours dans cette exercice. Vous avez juste besoin d'un effort supplémentaire pour obtenir la première date d'année financière pour la colonne Date.

+-------------------------+-----------+
|          DATE           | DAY_IN_FY |
+-------------------------+-----------+
| 2019-03-25 00:00:00.000 | D268      |
| 2018-12-06 00:00:00.000 | D159      |
| 2018-05-15 00:00:00.000 | D319      |
| 2017-11-22 00:00:00.000 | D145      |
| 2019-07-06 00:00:00.000 | D6        |
+-------------------------+-----------+


0 commentaires

0
votes

Je veux souligner que vous pouvez exprimer la requête comme suit: xxx pré>

la période code> peut également être définie comme suit: p>

     (VALUES (CONCAT(YEAR([Date] % 100, '-',
                     1 + YEAR([Date] % 100
                    )
             )
     ) as v(period)


0 commentaires