Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 将周累积到季度或周期。如果数据满足要求,则存在所有周_Sql Server_Reporting Services - Fatal编程技术网

Sql server 将周累积到季度或周期。如果数据满足要求,则存在所有周

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 如果本周涵盖整个季度或期间,我需要将数据集汇总到季度或期间。

我每周都有从第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_季度分组

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查询是通过添加逻辑构建块来构建的,因此它看起来可能很复杂,但很容易理解。它只在季度有效,现在我需要做周期和季度。