【发布时间】: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 结合起来,从而得到完美的结果,而且它会很简单!