sql汇总语句如何写?

用FR的表格计算功能行吗?


nhb2318 发布于 2019-4-23 01:41
1min目标场景问卷 立即参与
回答问题
悬赏:4 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共6回答
最佳回答
4
wukaihuaLv5初级互助
发布于2019-4-23 08:48


select 姓名

,sum(case when 年='2019' then 分数 end ) 年分数,sum(case when 月='04' then 分数 end ) 月分数

,sum(case when 年='2019' then 天数 end ) 年天数,sum(case when 月='04' then 天数 end ) 月天数

from (

select 日期,substr(日期,1,4) 年,substr(日期,6,2) 月,姓名,sum(分数) 分数,1 天数 from (

select  日期,姓名,sum(分数)/count(分数) as 分数

 from x where 修正分=0

 group by 日期,姓名

 union all

 select  日期,姓名,修正分 as 分数

 from x where 修正分!=0

 ) 

 group by 日期,姓名

 ) 

 group by 姓名


年月参数用帆软控件传进去就行了

  • nhb2318 nhb2318(提问者) 我现在正在用笨办法来做,但还是遇到了问题 http://bbs.fanruan.com/wenda/question/7846.html
    2019-04-23 10:19 
最佳回答
1
天空-小孙Lv4初级互助
发布于2019-4-23 15:43

我感觉你已经长大了,需要学会自己思考问题!

最佳回答
0
du673940771Lv0见习互助
发布于2019-4-23 08:47

sql和表格都可以啊

  • nhb2318 nhb2318(提问者) 我现在正在用笨办法来做,但还是遇到了问题 http://bbs.fanruan.com/wenda/question/7846.html
    2019-04-23 10:19 
最佳回答
0
黄源Lv6中级互助
发布于2019-4-23 09:16

sql处理,sum()over()函数处理年月汇总,报表过滤获取当月数据

最佳回答
0
No1-王子阳Lv5中级互助
发布于2019-4-23 09:41

很明显的扔需求求答案。

最佳回答
0
吾姓独孤Lv6高级互助
发布于2019-4-23 15:32(编辑于 2019-4-23 15:34)

我先模拟了下你的数据

image.png


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.姓名


这个是我的报表设计截图

image.png


最后是我的分页预览结果截图(a1多添加了一个记录  序号28  做了个对比)


image.png

image.png

  • 7关注人数
  • 756浏览人数
  • 最后回答于:2019-4-23 15:43
    请选择关闭问题的原因
    确定 取消
    返回顶部