其实往往本月XXX信息并不能仅仅考虑当前月的信息,例如如下:
请输出本月汽车行驶公里数,在一开始的时候我仅仅考虑取月初和月末的信息相减就可以,之后想想应该用以下脚本:
USE OA
GO
CREATE PROCEDURE P_GET_FUEL_STATISTICS @SUM_XSLC DECIMAL(8,2) OUTPUT,
@SUM_JYSL DECIMAL(8,2) OUTPUT,
@AVG_PJYJ DECIMAL(8,2) OUTPUT,
@IN_QCID UNIQUEIDENTIFIER,
@YEAR INT,
@MONTH INT
AS
BEGIN
-- 获取每月的行驶里程
DECLARE @LC_START DECIMAL(8,2)
DECLARE @LC_END DECIMAL(8,2)
DECLARE @DATE_START DATETIME
DECLARE @DATE_END DATETIME
-- 获取上一个加油日期
SELECT @DATE_START = MAX(T_QCJY.JYRQ)
FROM T_QCJY
WHERE
T_QCJY.QCID = @IN_QCID AND ((YEAR(T_QCJY.JYRQ) = @YEAR AND MONTH(T_QCJY.JYRQ) < @MONTH) OR (YEAR(T_QCJY.JYRQ) < @YEAR))
-- 如果没取到值,就取本月初的记录
IF @DATE_START IS NULL
BEGIN
-- 获取本月初加油日期
SELECT @DATE_START = MIN(T_QCJY.JYRQ)
FROM T_QCJY
WHERE
T_QCJY.QCID = @IN_QCID AND YEAR(T_QCJY.JYRQ) = @YEAR AND MONTH(T_QCJY.JYRQ) = @MONTH
END
print @DATE_START
-- 获取本月末加油日期、获取本月加油数总和
SELECT @DATE_END = MAX(T_QCJY.JYRQ), @SUM_JYSL = SUM(JYSL)
FROM T_QCJY
WHERE
T_QCJY.QCID = @IN_QCID AND YEAR(T_QCJY.JYRQ) = @YEAR AND MONTH(T_QCJY.JYRQ) = @MONTH
-- 获取上一个记录
SELECT @LC_START = T_QCJY.DRLC
FROM T_QCJY
WHERE
T_QCJY.QCID = @IN_QCID and T_QCJY.JYRQ = @DATE_START
-- 获取本月末记录
SELECT @LC_END = T_QCJY.DRLC
FROM T_QCJY
WHERE
T_QCJY.QCID = @IN_QCID and T_QCJY.JYRQ = @DATE_END
-- 获得了本月汽车里程
SELECT @SUM_XSLC = @LC_END - @LC_START
-- 获得本月所有车的平均油价
SELECT @AVG_PJYJ = AVG(T_QCJY.DRYJ)
FROM T_QCJY
WHERE
YEAR(T_QCJY.JYRQ) = @YEAR AND MONTH(T_QCJY.JYRQ) = @MONTH
END
GO