我有一个数据文件,我将数据批量插入我的临时表。
此文件在某些行上具有类似的序列。
0123456789 0122580000 2017092 2017092 300,000.00 10,000.00
..........
1527856778 6189580009 2017092 2015092 200,000.00 20,000.00
我已经在表格中进行了批量插入。
我需要将该文件中的某些数据插入到临时表中,因此它具有
以下记录:
文件日期是2015091年,2017年是一年,91是一年中的一天。
我有这个逻辑来得到一个日期:
select dateadd(day, ltrim(rtrim(right('2017092',3))) - 1, DATEFROMPARTS(left('2017092',4) + 0, 1 ,1))
但是,当我改变' 2017092' to [Data] - 我进行批量插入的表中的列名:
select dateadd(day,right(ltrim(rtrim(substring([Data],34,15))),3) - 1, DATEFROMPARTS(left(substring([Data],34,15),4) + 0, 1, 1)) from Staging_Table
where ltrim(rtrim(substring([Data],42,5))) = '92'
该查询为我0002-04-02
而不是2017-04-02
因此,当插入完成后,我的临时表中有以下内容:
Date Total1 Total2
2015-04-02 500,000,00 30,000,00
基本上,我需要得到按日期分组的所有美元金额的总和。
我该怎么办?
答案 0 :(得分:2)
假设您将数据作为字符串加载到一个字段SomeCol
示例强>
Declare @YourTable table (SomeCol varchar(max))
Insert Into @YourTable values
('0123456789 0122580000 2017092 2017092 300,000.00 10,000.00'),
('1527856778 6189580009 2017092 2015092 200,000.00 20,000.00')
Select Date = DateAdd(DAY,right(Pos3,3)-1,left(Pos3,4)+'0101')
,Total1 = sum(try_convert(money,Pos5))
,Total2 = sum(try_convert(money,Pos6))
From @YourTable A
Cross Apply (
Select Pos3 = ltrim(rtrim(xDim.value('/x[3]','varchar(100)')))
,Pos5 = ltrim(rtrim(xDim.value('/x[5]','varchar(100)')))
,Pos6 = ltrim(rtrim(xDim.value('/x[6]','varchar(100)')))
From (Select Cast('<x>' + replace((Select replace(A.SomeCol,' ','§§Split§§') as [*] For XML Path('')),'§§Split§§','</x><x>')+'</x>' as xml) as xDim) as A
) B
Group By Pos3
<强>返回强>
Date Total1 Total2
2017-04-02 500000.00 30000.00