Sql SSIS-排序聚合

Sql SSIS-排序聚合,sql,sql-server,ssis,Sql,Sql Server,Ssis,我有日粒度的源数据,我需要将其聚合到周粒度。大多数字段都是容易求和的聚合。但是,我有一个字段需要取星期天的值(有点像“第一次”聚合),另一个字段需要取星期六的值 我使用SSIS的方法是三次多播我的源数据,对easy字段进行常规聚合,然后使用lookup连接到日历表,分别匹配周六和周日的其他两个数据,以获取这些值。。。。然后合并,将所有内容重新连接在一起 有更好的方法吗 示例源数据: 输出应该是什么样子的: 您可以使用第一个值和最后一个值,如下所示: select top 1 with ties

我有日粒度的源数据,我需要将其聚合到周粒度。大多数字段都是容易求和的聚合。但是,我有一个字段需要取星期天的值(有点像“第一次”聚合),另一个字段需要取星期六的值

我使用SSIS的方法是三次多播我的源数据,对easy字段进行常规聚合,然后使用lookup连接到日历表,分别匹配周六和周日的其他两个数据,以获取这些值。。。。然后合并,将所有内容重新连接在一起


有更好的方法吗

示例源数据:

输出应该是什么样子的:


您可以使用第一个值和最后一个值,如下所示:

select top 1 with ties datepart(week, [day]) as [Week], 
    sum(sales) over(partition by datepart(week, [day])) as Sales, 
    FIRST_VALUE(BOP) over(partition by datepart(week, [day]) order by [day]) as BOP
  , EOP = LAST_VALUE(EOP) over(partition by datepart(week, [day]) order by [day] RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) 
from #youraggregate
    Order by Row_number() over(partition by datepart(week, [day]) order by [day])

使用派生列转换获取第一周

DATEPART("wk", Day)

在此之后,使用Aggregate using Week Column

有更好的方法吗?对对于简单的SQL语句,不要使用复杂的SSIS解决方案

SELECT 
Day, 
SUM(Sales) Sales, 
MAX(
  CASE WHEN DATEPART(dw,Day) = 1 THEN BOP ELSE NULL END
) As BOP,
MAX(
  CASE WHEN DATEPART(dw,Day) = 7 THEN EOP ELSE NULL END
) As EOP
FROM Table
GROUP BY Table

您可能需要根据服务器设置调整1和7,但希望您能理解。

谢谢您的建议。这很有道理,并帮助我避免过度思考。我的源数据来自文本文件,您是否建议只将文本文件导入到暂存表,然后通过SQL将所有转换到实际表中?我总是这样做的。有些人喜欢在ETL中进行内联操作,但您可以看到它有多么复杂。此外,使用暂存表允许您将重点放在导入部分,并将其与转换部分分开。