zoukankan      html  css  js  c++  java
  • 每天努力一点之SQL

    今天工作当中遇到一个问题:统计信息并导出EXcel 报表。

    刚开始只做了统计信息:

    如下图

    请看最后一列的数据。

    我当时想都从数据库里取出来,但是由于我能力有限没有做出来。先贴下后来写的SQL 语句。

    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>
                        }
                    }
    

     还是先处理数据好啊。

  • 相关阅读:
    HTML CSS3 手风琴菜单
    python代码- post请求图片上传
    python 一行代码生成 二维码
    Jenkins 中定时任务构建
    Jenkins 常用插件
    window系统,GitLab 远程与本地 SSH 认证连接
    Jmeter+Maven+Jenkins+Git接口自动化流程
    jmeter 响应中有中文乱码问题,解决
    Excel文件导入功能 用例设计思路
    Jmeter01 -mac下的安装
  • 原文地址:https://www.cnblogs.com/sunShineJing/p/3701296.html
Copyright © 2011-2022 走看看