SELECT
a.ERSDataValues_ERSCommodity_ID,c.ersGeographyDimension_country,
b.ERSTimeDimension_Year,
SUM(a.ERSDataValues_AttributeValue) as Total
FROM
cosd.ERSDataValues a, cosd.ERSTimeDimension_LU b,
cosd.ERSGeographyDimension_LU c
WHERE
a.ERSDataValues_ERSCommodity_ID IN (SELECT ERSBusinessLogic_InputDataSeries
FROM [AnimalProductsCoSD].[CoSD].[ERSBusinessLogic]
WHERE ERSBusinessLogic_InputGeographyDimensionID = 7493
AND ERSBusinessLogic_InputTimeDimensionValue = 'all months'
AND ERSBusinessLogic_Type = 'time aggregate')
AND a.ERSDataValues_ERSTimeDimension_ID = b.ERSTimeDimension_ID
AND c.ersGeographyDimension_country != 'WORLD'
AND a.ERSDataValues_ERSGeography_ID = c.ERSGeographyDimension_ID
GROUP BY
b.ERSTimeDimension_Year, a.ERSDataValues_ERSCommodity_ID,
c.ersGeographyDimension_country
ORDER BY
b.ERSTimeDimension_Year, a.ERSDataValues_ERSCommodity_ID
我想要的是上面的和函数从2018年1月到2018年6月返还总和,并且我想要同一时期的前一年的总和。我不想硬编码这几个月,但我宁愿动态地想要它。
我想过使用条件聚合函数,但输出与我的要求不匹配。有什么想法吗?
这是我想要的输出:https://imgur.com/a/YtDgR8s
答案 0 :(得分:0)
您可以在where子句中添加过滤器,以将时间维度限制为当前和上一年,然后将这样的内容添加到SELECT列表和GROUP BY:
CASE
WHEN YEAR(b.date)=YEAR(GETDATE()) THEN 'Current Year'
WHEN YEAR(b.date)=YEAR(GETDATE())-1 THEN 'Previous Year'
ELSE NULL
END
根据您定义当前和上一年的方式,它可能看起来有点不同,但这就是想法。
在限制Jan到June方面,这必须在WHERE子句中。如果您不想对特定月份(1月/ 6月)进行硬编码,那么我认为您必须从时间维度中引用其他内容 - 例如如果你有季度属性,你可以在(1,2)中说quarter_number。