Sql server 将周累积到季度或周期。如果数据满足要求,则存在所有周
我每周都有从第1周到第52周或第53周的财务数据。我们有季度和期间的定义 季度定义: 第一季度第1-16周 第2季度第17-28周 第三季度第29-40周 第四季度第41-52周/53 期间: 每4周为一个周期。根据年份的不同,可能有13或14个周期。 周期周数 1 4 2 8 3 12 4 16 5 20 6 24 7 28 8 32 9 36 10 40 11 44 12 48 13 52 如果本周涵盖整个季度或期间,我需要将数据集汇总到季度或期间。 应显示一种情况,始终为最后两周。如果只剩下一个星期,就需要把它分成几个星期。 我正在寻找SQL或SSRS报告中更好的解决方案。感谢您的帮助。我需要它作为一个函数,所以它可以用于所有不同的数据集。 我的解决方案: 选择FY\U Quarter,MAXFY\U Week作为Week\u Num进入Quarter 从dimdate开始,其中FY_Year=YEARgetdate按FY_季度分组Sql server 将周累积到季度或周期。如果数据满足要求,则存在所有周,sql-server,reporting-services,Sql Server,Reporting Services,我每周都有从第1周到第52周或第53周的财务数据。我们有季度和期间的定义 季度定义: 第一季度第1-16周 第2季度第17-28周 第三季度第29-40周 第四季度第41-52周/53 期间: 每4周为一个周期。根据年份的不同,可能有13或14个周期。 周期周数 1 4 2 8 3 12 4 16 5 20 6 24 7 28 8 32 9 36 10 40 11 44 12 48 13 52 如果本周涵盖整个季度或期间,我需要将数据集汇总到季度或期间。
SELECT FY_Period, MAX(FY_Week) AS Week_Num INTO #Period
FROM dimdate WHERE FY_Year =YEAR(getdate()) GROUP BY FY_Period
使用这些连接和卷起
这是数据集
Current Data:
Weeks Amount
Week 1 $15
Week 2 $15
Week 3 $15
Week 4 $15
Week 6 $15
Week 7 $15
Week 8 $15
Week 9 $15
Week 10 $15
Week 11 $15
Week 12 $15
Week 13 $15
Week 14 $15
Week 15 $15
Week 16 $15
Week 17 $15
Week 18 $15
Week 19 $15
Week 20 $15
Week 21 $15
新数据集:
Weeks/Quarter/Period Amount
Q1 $240
Week 17 $15
Week 18 $15
Week 19 $15
Week 20 $15
Week 21 $15
您可以在季度和周内尝试以下方法:
with PartQuarterData(week) as
(
select
case
when (select max(week) from FinancialData) < 16 then week
when week > 16 and (select max(week) from FinancialData) < 28 then week
when week > 28 and (select max(week) from FinancialData) < 40 then week
when week > 40 and (select max(week) from FinancialData) < 53 then week
else -1
end
from FinancialData
)
select sum(amount) as Total,
case
when week >= 0 and week <= 16 then "Quarter 1"
when week >= 17 and week <= 28 then "Quarter 2"
when week >= 29 and week <= 40 then "Quarter 3"
when week >= 41 and week <= 53 then "Quarter 4"
end as "Weeks/Quarters"
from FinancialData
where week not in
(
select week
from PartQuarterData
)
group by
case
when week >= 0 and week <= 16 then "Quarter 1"
when week >= 17 and week <= 28 then "Quarter 2"
when week >= 29 and week <= 40 then "Quarter 3"
when week >= 41 and week <= 53 then "Quarter 4"
end
union all
select amount, "Week " + cast(week as varchar(2)) as "Weeks/Quarters"
from FinancialData
where week in
(
select week
from PartQuarterData
)
您正在使用的语句是什么?请用MySQL、SQLServer、PoxGESQL等DBMS标记您的问题。考虑CTE或派生表,以避免重复长case语句。谢谢,这有助于这一点。现在,它变得更加复杂it@Gouda查询是通过添加逻辑构建块来构建的,因此它看起来可能很复杂,但很容易理解。它只在季度有效,现在我需要做周期和季度。