环比 月、年

本文深入解析了使用SQL构造复杂查询的过程,重点介绍了如何根据不同的时间条件动态生成SQL语句,实现对请求数据按月或按年的统计分析。通过具体代码示例,详细展示了参数化查询的构建方法,包括字段描述获取、时间部分处理、左连接及分组策略等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

string fieldName = ReportDimension.GetFieldDesc4Equipment(fieldID);
string monthOrYear = (endYear==0)?“MONTH”:“YEAR”;
string monthOrYearLeftJoinStr = (endYear == 0) ? " AND DATEPART(YEAR,r1.RequestDate) = DATEPART(YEAR ,r2.RequestDate) " : “”;
string monthOrYearWhereStr = (endYear == 0) ? " AND DATEPART(YEAR,r1.RequestDate)= @StartYear " : " AND DATEPART(YEAR ,r1.RequestDate)>=@StartYear AND DATEPART(YEAR,r1.RequestDate)<=@EndYear ";

        sqlStr = string.Format("SELECT {0}, DATEPART({1} ,r1.RequestDate) AS monthOrYear,COUNT(DISTINCT r1.ID) AS now,COUNT(DISTINCT r2.ID) AS pre "+
                              " FROM tblRequest r1 "+

                              " LEFT JOIN jctRequestEqpt re ON re.RequestID =r1.ID  "+
                              " LEFT JOIN tblEquipment e ON e.ID =re.EquipmentID "+
                              " LEFT JOIN ( "+

                              " SELECT sr.ID ID,sr.RequestDate,sr.RequestType,{0} " +
                              " FROM tblEquipment e  "+
                              " LEFT JOIN jctRequestEqpt sre ON sre.EquipmentID = e.ID "+
                              " LEFT JOIN tblRequest sr ON sr.ID =sre.RequestID "+

                              " ) r2 ON r1.RequestType =r2.RequestType  "+
                              " AND DATEPART({1},r1.RequestDate) = DATEPART({1} ,r2.RequestDate)+1  {2}" +
                              " AND r2{4} = {0} " +

                              " WHERE r1.RequestType=@RequestType {3} AND re.RequestID IS NOT NULL AND re.EquipmentID IS NOT NULL "+
                              " GROUP BY DATEPART({1} ,r1.RequestDate) ,{0}",
                              fieldName,
                              monthOrYear,
                              monthOrYearLeftJoinStr,
                              monthOrYearWhereStr,
                              fieldName.Substring(fieldName.IndexOf(".")));
        using (SqlCommand command = ConnectionUtil.GetCommand(sqlStr))
        {
            command.Parameters.Add("@RequestType", SqlDbType.Int).Value = (type == RequestInfo.RequestTypes.Recall) ? RequestInfo.RequestTypes.Inspection : type;
            command.Parameters.Add("@StartYear", SqlDbType.Int).Value = startYear;
            if (endYear != 0)
                command.Parameters.Add("@EndrtYear", SqlDbType.Int).Value = endYear;

            return GetDataTable(command);
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值