2014-12-06 6 views
1

У меня есть следующая таблица:Как получить сумму записей на основе другого столбца?

JobCode | Designation | SalaryWithIncrement 
---------------------------------------------- 
JC001 | IT | 150,000 
JC001 | IT | 155,000 
JC002 | Sales | 100,000 
JC003 | HR | 200,000 
JC003 | HR | 210,000 
JC003 | HR | 220,000 

Требуемая мощность:

JobCode | Designation | SalaryWithIncrement 
------------------------------------------------ 
JC001 | IT   | 305,000 
JC002 | Sales  | 100,000 
JC003 | HR   | 630,000 

Ниже приведен код, который я использовал, но я не получаю итога после группировки

SELECT JobCode, designation, salaryWithIncrement 
FROM table1 
group by (JobCode) 

Любой помощь приветствуется.

+2

Как вы можете получить 150 + 155 = 205? Я думаю, вы сделали опечатку. – AdamMc331

+1

Спасибо @ McAdam331. исправлено это – h4kl0rd

+0

Спасибо. Я никогда не могу быть уверен, что это опечатка, или я неправильно понял проблему. – AdamMc331

ответ

2

Вы можете использовать совокупную sum функции:

SELECT JobCode, designation, SUM(salaryWithIncrement) 
FROM  table1 
GROUP BY JobCode, designation 
1

В большинстве случаев, когда у вас есть такое требование, Реализовать с использованием GroupBy с функцией SQL агрегатного Группы полей на основе того, что вы хотите записей, в youu случае JobCode и designation Вы можете узнать о группе BY здесь MSDN

SELECT JobCode,designation,SUM(salaryWithIncrement) 
FROM Job GROUP BY JobCode,designation 

Вот ваш пример рабочего кода SQL Fiddle

1

Для этого вы должны использовать функцию sum в операторе group by.

select jobCode, designation, sum(salaryWithInc) from Job group by jobCode; 

Проверьте это link, чтобы увидеть рабочий пример.

На мой взгляд, вам нужно реструктурировать по-разному таблицу, чтобы избежать избыточности данных (jobCode и designation). Для этого вы можете иметь две таблицы, одну с jobCode и designation, а другую с salaryWithInc.

create table Job (jobId int auto_increment, jobCode varchar(5), designation varchar(25), primary key (jobId)); 
create table Salary (job int, salaryWithInc decimal(5,2), foreign key (job) references Job (jobId)); 
insert into Job (jobCode, designation) values ("JC001", "IT"),("JC002", "Sales"), ("JC003", "HR"); 
insert into Salary values (1,150.00), (1,155.00),(2,100.00),(3,200.00),(3,210.00),(3,220.00); 

В этом случае, можно использовать этот запрос, чтобы получить требуемый результат:

select J.jobCode, J.designation, sum(S.salaryWithInc) from Job as J join Salary as S on J.jobId=S.job group by (J.jobId); 

Проверьте это link увидеть рабочий пример.

Надеюсь, это полезно!

Смежные вопросы