РАССЧИТАТЬ ДО ГОДА В ДАТУ В СЕРВЕРЕ SQL 2008 - PullRequest
0 голосов
/ 22 марта 2019

Я пытаюсь вычислить предыдущий год сегодня, но я получаю Weight_PreviousYTD за все предыдущие годы.

Мне нужно принять во внимание другие столбцы.Как я могу изменить свой сценарий?

Например:

Для 20 марта 2019 года: ранее с начала года = с 1 января 2018 по 20 марта 2018 года

WITH grouped_by_date AS
  (SELECT *
   FROM factsales s
),
     cumulative_sum_for_ytd AS
  (SELECT T.*,
          T1.Weight_YTD
   FROM grouped_by_date T CROSS APPLY
     (SELECT SUM(QTY_UoM) AS Weight_YTD
      FROM grouped_by_date
      WHERE [Delivery_Year]=T.[Delivery_Year]
        AND convert(date,Delivery_Year+'-'+ Delivery_month+'-'+ [Invoicing_Day])<=convert(date,T.Delivery_Year+'-'+ t.Delivery_month+'-'+ t.[Invoicing_Day])
     and  [Sales_Organization]=T.Sales_Organization

      and[Sales_Product_Name_N3]=T.Sales_Product_Name_N3
      and[Sales_Product_Name_N2]=T.[Sales_Product_Name_N2]
      and[Sales_Product_Name_N1]=T.[Sales_Product_Name_N1]
      and[Market_Segment_Name_N2]=T.[Market_Segment_Name_N2]

      and[Doc_Currency]=T.Doc_Currency

      and[User_Name_N1]=T.User_Name_N1
      and[Engineer_Code]=T.Engineer_Code

      and[User_Name_N2]=T.User_Name_N2
      and[Bill_To_Customer_Code]=T.Bill_To_Customer_Code

      and[User_Country_Code]=T.User_Country_Code 
      and[User_N3_Country_Name]=T.User_N3_Country_Name

         ) T1),
     hack_to_do_lag AS
  (

  SELECT *,
          CASE
              WHEN [Delivery_Year]%2=1 THEN MAX(CASE
                                                    WHEN [Delivery_Year]%2=0 THEN [Weight_YTD]
                                                END) OVER (PARTITION BY ([Delivery_Year]+0)/2)
              ELSE MAX(CASE
                           WHEN [Delivery_Year]%2=1 THEN [Weight_YTD]
                       END) OVER (PARTITION BY ([Delivery_Year]+1)/2)
          END AS Weight_PreviousYTD
   FROM cumulative_sum_for_ytd
)
SELECT *
FROM hack_to_do_lag
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...