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