首页 > 代码库 > 每天努力一点之SQL
每天努力一点之SQL
今天工作当中遇到一个问题:统计信息并导出EXcel 报表。
刚开始只做了统计信息:
如下图
请看最后一列的数据。
我当时想都从数据库里取出来,但是由于我能力有限没有做出来。先贴下后来写的SQL 语句。
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | alter PROCEDURE spread_GetAuthoInfoByStatistics( @ Count int ) AS SET NOCOUNT ON ; BEGIN DECLARE @hitsHistory INT if(@ Count =0) begin SELECT @hitsHistory= COUNT (1) FROM dbo.AuthinfoAct ; WITH TempTable AS ( SELECT YEAR (AddTime) [ Year ], COUNT (1) AS Total --, @hitsHistory,@hitsHistory+COUNT(1) FROM dbo.AuthinfoAct GROUP BY YEAR (AddTime) ) SELECT A. Year , A.Total, SUM (B.Total) AcumulateTotal FROM TempTable A, TempTable B WHERE A. Year >=B. Year GROUP BY A. Year ,A.Total order by A. Year end else begin SELECT @hitsHistory= COUNT (1) FROM dbo.AuthinfoAct WHERE YEAR (AddTime) != YEAR (GETDATE()); WITH TempTable AS ( SELECT MONTH (AddTime) [ Month ], COUNT (1) AS Total --, @hitsHistory,@hitsHistory+COUNT(1) FROM dbo.AuthinfoAct WHERE YEAR (AddTime) = YEAR (GETDATE()) GROUP BY MONTH (AddTime) ) SELECT A.[ Month ], A.Total, SUM (B.Total) +@hitsHistory AcumulateTotal FROM TempTable A, TempTable B WHERE A.[ Month ]>=B.[ Month ] GROUP BY A.[ Month ],A.Total end END GO |
看着也挺简单的是吧,但是我当初想的比较麻烦还想到了递归。
下面就说说我第一次怎么做的吧。、
第一次从数据库统计好第一列,第二列的数据。
最后一列的数据我利用代码的方便性写的。
如下:
var Num = 0; for (int i = 0; i < models.Count; i++) { if (i == 0) { <tr> <td class="edit">@models[i].Item2</td> <td>@models[i].Item1</td> <td>@models[i].Item3</td> <td>@(models[i].Item1+visitHis.Value) @{ Num = models[i].Item1 + visitHis.Value;} </td> </tr> } else { <tr> <td class="edit">@models[i].Item2</td> <td>@models[i].Item1</td> <td>@(models[i].Item1 + Num) @{ Num = models[i].Item1 + Num;} </td> </tr> } }
还是先处理数据好啊。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。