【问题标题】:Query for computing a column using other computed columns使用其他计算列计算列的查询
【发布时间】: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.NoTotalPayPerEmp 进行分组,但我无法完成。 我会在查询中犯一些愚蠢的错误,因为我对 sql 很陌生,所以请后悔

预期表:

+---------+--------------------+
| Proj.No | TotalPayPerProject |
+---------+--------------------+
|     100 |           14093.75 |
|     101 |               5250 |
|     103 |            4881.25 |
+---------+--------------------+

【问题讨论】:

  • 您通常对集合函数不是参数的选定列进行分组。
  • 请澄清您是要编写 UPDATE 查询还是只编写返回“预期表”的 SELECT。你为什么使用 UPDATE 来获取示例?
  • 您可以不选择GPN和EmpPosition直接跳到答案。通过选择这两个字段,您将击败 GROUP BY(对于项目),因为这些字段将聚合置于 Employee 粒度。而是选择项目。没有其他细节,按照你的指示执行算法,然后按 Proj 对这个算法进行 SUM。没有。
  • “我做不到” 为什么不呢?你得到了什么结果,而不是你想要的结果?有错误吗?

标签: sql sql-server reporting-services


【解决方案1】:

我认为这可以使用您的一些算法来完成,除了 ProjectNo 粒度:

SELECT ProjectNo
      ,SUM(ChargedHours*PayPerHour) [TotalPayPerProject]
FROM ProjectDetails
GROUP BY ProjectNo  

这给出了输出:

ProjectNo   TotalPayPerProject
100         13475
101         5250
103         2406.25

由于某种原因,这与您的预期输出不同。

这是一个 SQL 小提琴:http://sqlfiddle.com/#!6/21a33/2/0

【讨论】: