create table #tmp (Name varchar(10), Code varchar(10), Date datetime, Total int)
insert into #tmp
select 'abc','A-8','2016-10-12',45
现在,我想基于总计拆分数据。
例如,如果我需要将数据除以20,则结果应如下所示
Name Code Date Total
abc A-8 2016-10-12 20
abc A-8 2016-10-12 20
abc A-8 2016-10-12 5
您可以看到较高的代码,还可以看到我将单行分为3行,除Total之外的所有数据都相同。
总计应以不同的方式计算,由于结果,我有3行。如果合计为65,则将有4行具有相同的数据,只有合计将被更改,例如20、20、20、5,并且其余部分将保持不变。
我不想为此使用任何循环,例如WHILE等。
假设您有一个像dbo.Nums这样的表
SELECT *
FROM dbo.Nums
n
-----------
1
2
3
4
5
...
10000000
或者,您可以将以下查询用于相同的目的。
SELECT ROW_NUMBER() OVER (ORDER BY object_id) FROM sys.all_objects
然后查询将是
DECLARE @d AS INT = 20;
SELECT #tmp.Name, Code, Date, @d AS Total
FROM #tmp
CROSS JOIN dbo.Nums
WHERE dbo.Nums.n <= (#tmp.Total / @d)
UNION ALL
SELECT #tmp.Name, Code, Date, (Total % @d) AS Total
FROM #tmp
WHERE (Total % @d) <> 0
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句