我先模拟了下你的数据
sql不太会,感谢提供机会进行学习~~~
数据库是sql server ,先写了四个聚合函数将你需要的四个目标值查询出来
然后我用四个 inner join on 将 四个查询表联合起来进行联合查询
然后这个是我写的sql
SELECT A.姓名,A.本月得分,B.姓名,B.本年得分,C.本月出勤,D.本年出勤
FROM (((
SELECT 姓名,CONVERT(decimal(18,2),AVG(分数))+SUM(修正分) AS 本月得分
FROM dbo.[pjb]
WHERE 日期 >= CONVERT(VARCHAR(50),DATEADD(dd,-DAY(GETDATE())+1,GETDATE()),120)
AND 日期 <= CONVERT(VARCHAR(50),GETDATE(),120)
GROUP BY 姓名
) AS A INNER JOIN (
SELECT 姓名,CONVERT(decimal(18,2),AVG(分数))+SUM(修正分) AS 本年得分
FROM dbo.[pjb]
WHERE 日期 >= CONVERT(VARCHAR(50),DATEADD(YYYY,DATEDIFF(YYYY,0,GETDATE()),0),120
)AND 日期 <= CONVERT(VARCHAR(50),GETDATE(),120)
GROUP BY 姓名
) AS B ON A.姓名 = B.姓名) INNER JOIN (
SELECT 姓名,COUNT(DISTINCT(日期)) AS 本月出勤 FROM dbo.[pjb]
WHERE 日期 >= CONVERT(VARCHAR(50),DATEADD(dd,-DAY(GETDATE())+1,GETDATE()),120)
AND 日期 <= CONVERT(VARCHAR(50),GETDATE(),120)
AND 分数 IS NOT NULL
GROUP BY 姓名
) AS C ON A.姓名 = C.姓名) INNER JOIN (
SELECT 姓名,COUNT(DISTINCT(日期)) AS 本年出勤
FROM dbo.[pjb]
WHERE 日期>=CONVERT(VARCHAR(50),DATEADD(YYYY,DATEDIFF(YYYY,0,GETDATE()),0),120)
AND 日期 <= CONVERT(VARCHAR(50),GETDATE(),120)
GROUP BY 姓名
)AS D ON A.姓名 = D.姓名
这个是我的报表设计截图
最后是我的分页预览结果截图(a1多添加了一个记录 序号28 做了个对比)