【发布时间】:2026-02-10 18:45:01
【问题描述】:
表格:项目详情
+-----+------------------+------------+--------------+------------+
| GPN | EmployeePosition | Project.No | ChargedHours | PayPerHour |
+-----+------------------+------------+--------------+------------+
| 2 | B | 101 | 50 | 57 |
| 3 | C | 100 | 75 | 44 |
| 4 | D | 100 | 100 | 24.75 |
| 5 | E | 103 | 125 | 19.25 |
| 6 | F | 101 | 150 | 16 |
| 7 | C | 100 | 175 | 44 |
+-----+------------------+------------+--------------+------------+
我需要找出每个项目的总工资。所以首先我必须找出每位员工的总工资并按Project.No分组。
下表显示了使用其他 2 个现有列创建的每位员工的总工资
+-----+-------------+---------+------------+----------+----------------+
| GPN | EmpPosition | Proj.No | ChargedHrs | PayPerHr | TotalPayPerEmp |
+-----+-------------+---------+------------+----------+----------------+
| 2 | B | 101 | 50 | 57 | 993.75 |
| 3 | C | 100 | 75 | 44 | 2850 |
| 4 | D | 100 | 100 | 24.75 | 3300 |
| 5 | E | 103 | 125 | 19.25 | 2406.25 |
| 6 | F | 101 | 150 | 16 | 2400 |
| 7 | C | 100 | 175 | 44 | 7700 |
+-----+-------------+---------+------------+----------+----------------+
我的查询:
Select EngNumber, SUM([CharHrs])[SumOfChargedHours], Levell, CostPH,
SUM([CharHrs])*CostPH [TotalPayPerEmployee]
FROM data1.dbo.PayedPerHour
GROUP BY EngNumber, Levell, TotalPayPerEmployee, CostPH
ORDER BY EngNumber;
Update data1.dbo.PayedPerHour
SET CostPH = CASE Levell
WHEN 'Associate Director' THEN '79.75'
WHEN 'Senior Manager' THEN '57'
WHEN 'Manager' THEN '44'
WHEN 'Senior' THEN '24.75'
WHEN 'Staff 2, 3 & 4' THEN '19.25'
WHEN 'Staff 1' THEN '16'
ELSE 'NULL'
END
WHERE Levell IN('Associate Director', 'Senior Manager','Manager', 'Senior',
'Staff 2, 3 & 4', 'Staff 1');
我想按 Proj.No 对 TotalPayPerEmp 进行分组,但我无法完成。 我会在查询中犯一些愚蠢的错误,因为我对 sql 很陌生,所以请后悔
预期表:
+---------+--------------------+
| Proj.No | TotalPayPerProject |
+---------+--------------------+
| 100 | 14093.75 |
| 101 | 5250 |
| 103 | 4881.25 |
+---------+--------------------+
【问题讨论】:
-
WITH CTE 能帮上忙吗? docs.microsoft.com/en-us/sql/t-sql/queries/…
-
您通常对集合函数不是参数的选定列进行分组。
-
请澄清您是要编写 UPDATE 查询还是只编写返回“预期表”的 SELECT。你为什么使用 UPDATE 来获取示例?
-
您可以不选择GPN和EmpPosition直接跳到答案。通过选择这两个字段,您将击败
GROUP BY(对于项目),因为这些字段将聚合置于 Employee 粒度。而是选择项目。没有其他细节,按照你的指示执行算法,然后按 Proj 对这个算法进行 SUM。没有。 -
“我做不到” 为什么不呢?你得到了什么结果,而不是你想要的结果?有错误吗?
标签: sql sql-server reporting-services