【问题标题】:How to Show Previous Year on Dynamic Date如何在动态日期上显示上一年
【发布时间】:2021-06-03 17:03:42
【问题描述】:

我有一个包含客户、产品、日期和数量/收入数据的数据库。我想创建两个新列,以根据日期/客户/产品显示上一年的销量和收入。

我尝试合并两个视图,一个具有日期(未更改),另一个视图创建一个 CTE,在其中我选择减去一年的日期,另一个选择语句关闭 VOL 和 REV 重命名为 VOL_PY 和 REV_PY但数据不完整。基本上发生的情况是,如果上一年有数据,PY 数据只会拉动销量和收入(例如,如果客户在 2021 年没有销售产品但在 2020 年 DID,则不会拉动 2020 年的 VOL_PY - 因为它在 2021 年没有出售)。如何让我的代码在日期中包含匹配项以及“当前”年份中没有数据的实例?

这就是我的目标: [新列的示例数据]

当前年度视图:

   SELECT
   CUSTOMER
  ,PRODUCT
  ,DATE
  ,VOL
  ,REV
  ,0 AS VOL_HL_PY
  ,0 AS REV_DOLS_PY
  ,DATEADD(YEAR, -1, DATE) AS DATE_PY FROM dbo.vwReporting

去年的看法:

WITH CTE_PYFIGURES 
     ([AUTONUMBER]
      ,CUSTOMER
      ,PRODUCT
      ,DATE
      ,VOL
      ,REV
      ,DATE_PY
      ) AS 

(
SELECT b.*
     , DATEADD(YEAR, 1, DATE) AS DATE_PY
FROM dbo.basetable b
)

SELECT  
       v.CUSTOMER
      ,v.PRODUCT
      ,v.DATE
      ,0 AS v.VOL
      ,0 AS v.REV
      ,CTE.VOL_HL AS VOL_HL_PY
      ,CTE.REV_DOLS AS REV_DOLS_PY
      ,DATEADD(YEAR,-1,CTE.PERIOD_DATE_PY) AS PERIOD_DATE_PY
FROM dbo.vwReporting AS v
FULL OUTER JOIN CTE_PYFIGURES AS CTE ON CTE.CUSTOMER=V.CUSTOMER AND CTE.PRODUCT=V.PRODCUT AND CTE.DATE_PY=V.DATE 

【问题讨论】:

  • 合并两个数据集,其中零应该映射到相应的度量(今年部分的PY度量和上一年部分的当年度量),然后聚合它们
  • 为您正在使用的数据库添加标签。示例数据应以文本表形式发布,而不是图像。
  • 我将创建一个显示每年值的查询,然后我将使用相同的查询进行左连接,除了左连接语句中的年份将是年 + 1。想象一下,您将 2021 与 2020 + 1 结合起来,从而得到完美的结果,而且它会很简单!

标签: sql date view union-all


【解决方案1】:

您需要将当前年份的数据偏移到前一年,然后将其与当前数据合并,为“其他”度量设置零(VOLREV 用于上一年,VOL_PYREV_PY本年度)。然后进行聚合。这样,您将获得当前或上一年的所有维度值。

with a as (
  select
    CUSTOMER
    , PRODUCT
    , [DATE]
    , VOL
    , REV
    , 0 as vol_py
    , 0 as rev_py
  from dbo.vwReporting

  union all

  select
    CUSTOMER
    , PRODUCT
    , dateadd(year, 1, [DATE]) as [DATE]
    , 0 as VOL
    , 0 as REV
    , vol as vol_py
    , rev as rev_py
  from dbo.vwReporting
)
select
    CUSTOMER
    , PRODUCT
    , [DATE]
    , VOL
    , sum(vol) as vol
    , sum(rev) as rev
    , sum(vol_py) as vol_py
    , sum(rev_py) as rev_py
from a
group by
    CUSTOMER
    , PRODUCT
    , [DATE]
    , VOL

【讨论】:

  • 谢谢!这解决了我的问题,非常感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-10
相关资源
最近更新 更多