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
这怎么可能?
看来您可能需要 Element
、SUM(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 连接。
我创建了一个查询以获得以下输出-
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
这怎么可能?
看来您可能需要 Element
、SUM(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 连接。