大佬们,问一个sqlserver数据库sql查询问题

有3张表

TaskTypes (TaskTypeID,TaskTypeName) -任务类型表

Tasks (TaskID,TaskTypeID,TaskName)-任务表

TaskRecords(TaskRecordID,TaskID,DateTime,Time,UserName)-任务内容记录表,记录每项内容每天的耗时,Time字段为耗时

需求:一句sql语句查询从5月1日到5月30日,某个用户的TaskTypeName,TaskName,每项TaskName的总耗时,以及每项TaskName的总耗时

站所有任务总耗时的占比

SQL 被迫营业的小白 发布于 2024-6-4 10:53
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共1回答
最佳回答
1
用户k6280494Lv6专家互助
发布于2024-6-4 10:57

WITH TaskDuration AS (      SELECT          t.TaskTypeID,          t.TaskName,          SUM(tr.Time) AS TotalTime      FROM          Tasks t      INNER JOIN          TaskRecords tr ON t.TaskID = tr.TaskID      WHERE          tr.UserName = '指定的用户名'  -- 替换为您的用户名          AND tr.DateTime BETWEEN '2023-05-01' AND '2023-05-30'      GROUP BY          t.TaskTypeID,          t.TaskName   ),   TotalDuration AS (      SELECT          SUM(TotalTime) AS GrandTotalTime      FROM          TaskDuration   )   SELECT      td.TaskTypeID,      tt.TaskTypeName,      td.TaskName,      td.TotalTime,      td.TotalTime * 100.0 / td2.GrandTotalTime AS Percentage   FROM      TaskDuration td   INNER JOIN      TaskTypes tt ON td.TaskTypeID = tt.TaskTypeID   CROSS JOIN      TotalDuration td2;

  • 被迫营业的小白 被迫营业的小白(提问者) 大佬,这是修改过的sql,发现不输入员工姓名,查全部员工5月份数据的时候,每个人的所有任务耗时是全部人员所有任务耗时,这个怎么修改: WITH TaskDuration AS (SELECT tr.EmployeeName,t.TaskTypeId,t.TaskTitle,SUM(tr.TimeConsume) AS TotalTime FROM Tasks t INNER JOIN TaskRecords tr ON t.TaskId = tr.TaskId WHERE 1=1 AND tr.EFFE_FLAG !=0 AND t.EFFE_FLAG!=0 ${if(len(text_employee_name)==0,"","AND tr.EmployeeName like'"+'%'+text_employee_name+'%'+"'")} ${if(len(dateEditor_from)==0,"","and tr.DATA_TIME >='"+ dateEditor_from + "'")} ${if(len(dateEditor_to)==0,"","and tr.DATA_TIME <='"+dateEditor_to + "'")} GROUP BY tr.EmployeeName,t.TaskTypeId,t.TaskTitle),TotalDuration AS (SELECT SUM(TotalTime) AS GrandTotalTime FROM TaskDuration ) SELECT ${if(and ((len(text_employee_name))==0,len(dateEditor_from)==0,len(dateEditor_to)==0),"top 100","")} td.EmployeeName, tt.TaskTypeName,td.TaskTitle,td.TotalTime,(td.TotalTime / td2.GrandTotalTime)*100 AS Percentage,td2.GrandTotalTime FROM TaskDuration td INNER JOIN TaskTypes tt ON td.TaskTypeId = tt.TaskTypeId CROSS JOIN TotalDuration td2;
    2024-06-04 16:23 
  • 用户k6280494 用户k6280494 回复 被迫营业的小白(提问者) GROUP BY tr.UserName, t.TaskTypeID, t.TaskName
    2024-06-04 16:25 
  • 用户k6280494 用户k6280494 回复 被迫营业的小白(提问者) 把条件去了,就名字加入到GROUP BY
    2024-06-04 16:26 
  • 被迫营业的小白 被迫营业的小白(提问者) 回复 用户k6280494 没成功,我再新开一个问题,大佬回答下吧
    2024-06-04 16:57 
  • 2关注人数
  • 160浏览人数
  • 最后回答于:2024-6-4 10:57
    请选择关闭问题的原因
    确定 取消
    返回顶部