pea*_*dog 5 sql-server t-sql sql-server-2016
我有一个电子表格,我要导入到原始数据库中,一个 SQL Server 2016 数据库。它有所谓的“密码箱格式”的记录,显然是银行使用的。它通常看起来像这样:
Batch1 详细信息
子记录Batch2
的批处理
标题行的
另一个子记录
摘要
需要注意的是:
有没有办法查询这个,以便我可以轻松地对例如一批和它的子+页脚记录进行分组?我必须做的一件事是指出页脚记录包含正确的聚合(取自子记录;包括批次的子记录数量,这是我需要验证的一部分)。
假设输入数据的顺序是这样的,即批处理的开头 ( Column1=1
) 始终具有该批处理中最少的数据RowNumber
,您可以执行以下操作,使用RowNumber
前面的标头记录中最大的一个来分配伪批处理编号:
select t.*,
max(case column1 when 1 then RowNumber end)
over(order by rownumber range between unbounded preceding and current row) as batchid
from tbl t
Run Code Online (Sandbox Code Playgroud)
(小提琴)
如果将以上内容包装在子选择中并使用伪批次号来分区数据或对数据进行分组,则可以从那里使用聚合或窗口函数来计算聚合:
select
max(case column1 when 1 then column3 end) as batchid,
sum(case column1 when 2 then some_numeric_column end) as sum_children,
max(case column1 when 8 then column3 end) as footer_value
from (
select t.*,
max(case column1 when 1 then rownumber end)
over(order by rownumber range between unbounded preceding and current row) as batchnum
from tbl
) t1
group by batchnum
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
249 次 |
最近记录: |