SQL 查询得到两列的总和其余为相同的值

SQL Query to get the sum of two columns rest being the same value

我创建了一个查询以获得以下输出-

Effective_date  Employee_number Name    CLASSIFICATIONNAME      Element                 CURRENTAMOUNT   HOURS   RATE    HOURS_VALUE COUNT_VALUE
6/5/2020        23              Jai         Standard Earnings   Benefit Credit  Results     6.75                1
6/5/2020        23              Jai         Standard Earnings   Regular Earnings Results    244.62          6   40.77      6            1
6/5/2020        23              Jai         Standard Earnings   Regular Earnings Results    1956.96         8   40.77      48           6
6/5/2020        23              Jai         Standard Earnings   Stat Holiday  Results       326.16          8   40.77      8            1
6/5/2020        23              Jai         Standard Earnings   Paid Time Off Results       326.16          8   40.77      8            1

使用查询 -

select effective_date,
person_number Employee_number,
Name,
CLASSIFICATIONNAME,
Element,
SUM(resultvalue)  CURRENTAMOUNT,
HOURS,
RATE,
 (Count(resultvalue)) COUNT_VALUE,
(Count( resultvalue) * hours) HOURS_VALUE

from 

per_payroll_table pay,
per_all_people people
where pay.person_id  = people.person_id

我想要列 currentamount 和 hours_value 的相同元素的总和。除了少数情况外,它大部分都在工作,在这些情况下,同一元素的时间不同。在上述情况下,它是定期收益结果。对于这个元素,输出应该显示 244.62+1956.96 和 hours_value = 54 的总和,但 Rate =40.77 和其他列是一样的。

预期输出-

Effective_date  Employee_number Name    CLASSIFICATIONNAME      Element                 CURRENTAMOUNT   HOURS   RATE    HOURS_VALUE COUNT_VALUE
6/5/2020        23              Jai         Standard Earnings   Benefit Credit  Results     6.75                1
*6/5/2020       23              Jai         Standard Earnings   Regular Earnings Results    2201.58     14      40.77      54           7*
6/5/2020        23              Jai         Standard Earnings   Stat Holiday  Results       326.16      8       40.77      8            1
6/5/2020        23              Jai         Standard Earnings   Paid Time Off Results       326.16      8       40.77      8            1

这怎么可能?

看来您可能需要 ElementSUM(currentamount)SUM(HOURS) 从您的 table 进行分组。您可以 select 其他必填列以及您的要求。

样本

select Element, SUM(currentamount), SUM(HOURS)
from <your_table>
group by Element

GROUP BY 应该可以解决您的问题。唯一的问题是您的 RATE 值。这取决于您在输出中想要什么。如果所有行都包含相同的 GROUP 值,您可以简单地计算 AVG 或 MIN 或 MAX,所有这些都会 return 您得到相同的结果。但是,如果有不同的值,你必须定义你的方法你想要什么输出。

SELECTeffective_date,
person_number Employee_number,
Name,
CLASSIFICATIONNAME,
Element,
SUM(resultvalue)  CURRENTAMOUNT,
SUM(HOURS),
AVG(RATE), -- Avg should keep the same value if rate is same for the group
(Count(resultvalue)) COUNT_VALUE,
(Count( resultvalue) * hours) HOURS_VALUE
from 
-- Use standard joining
per_payroll_table pay 
INNER JOIN per_all_people people
ON pay.person_id  = people.person_id
GROUP BY ffective_date,
person_number Employee_number,
Name,
CLASSIFICATIONNAME,
Element

您当前的查询没有显示您正在使用的 group by 子句。

您需要一个适当的 group by 子句和 aggregate functions 如下:

SELECT 
  effective_date,
  person_number Employee_number,
  Name,
  CLASSIFICATIONNAME,
  Element,
  SUM(resultvalue) CURRENTAMOUNT,
  SUM(HOURS) as HOURS, -- use sum aggregate function here
  RATE, 
  Count(resultvalue) COUNT_VALUE,
  Count(resultvalue) * SUM(HOURS) HOURS_VALUE -- use sum aggregate function on hours here
from 
  per_payroll_table pay 
  INNER JOIN per_all_people people
  ON pay.person_id  = people.person_id
GROUP BY 
  effective_date,
  person_number,
  Name,
  CLASSIFICATIONNAME,
  Element,
  Rate

建议使用标准 ANSI 连接。