2013-03-12 4 views
2

Это SQL:SQL Сумма строк, сгруппированных по идентификатору

select Name, 
     (select COUNT(1) from tbl_projects where statusId = tbl_sections.StatusId) as N 
from tbl_sections 
left join tbl_section_names on tbl_section_names.Id = NameId 

Генерирует следующие данные:

Name N 
Completed 133 
Cancelled 100 
Unassigned 1 
Sales 49 
Development 10 
Development 4 
Development 1 

Я пытаюсь изменить его так, он возвращает данные следующим образом:

Name N 
Completed 133 
Cancelled 100 
Unassigned 1 
Sales 49 
Development 15 

(т. Е. Подытожить строки, где указано одинаковое название)

Может ли кто-нибудь предложить некоторые подсказки о том, как сделать эту работу? Я предполагаю, что мне нужен SUM и GROUP BY, но он даже не запускает запрос, поскольку все, что я получаю, это ошибки.

ответ

1

Попробуйте этот запрос. Сумма составляет N сгруппирована по Name.

SELECT Name, SUM(N) 
FROM (
    SELECT Name, 
    (SELECT COUNT(1) 
     FROM tbl_projects 
     WHERE statusId = tbl_sections.StatusId 
    ) AS N 
    FROM tbl_sections 
    LEFT JOIN tbl_section_names ON tbl_section_names.Id = NameId 
) a 
GROUP BY a.Name 
+0

Мне не хватало много чего, просто инкапсулируйте внутри другого, выберите, как использовать предыдущий выбор в списке, чтобы я мог использовать его в другом месте. Делает совершенный смысл. Благодаря! – squidge

0
Select Name, Sum(N) from 
    (select Name, 
     (select COUNT(1) from tbl_projects where statusId = tbl_sections.StatusId) as N 
    from tbl_sections 
    left join tbl_section_names on tbl_section_names.Id = NameId) 
group by Name 
1

Попробуйте

select Name, count(p.statusid) N 
from tbl_sections 
left join tbl_section_names on tbl_section_names.Id = NameId 
left outer join tbl_projects p on tbl_sections.StatusId = p.statusId 
group by Name 
0

Этот запрос дает вам рассчитывать на статус, что означает развитие имеет участки с тремя различными состояния, и запрос будет отражать это и больше смысла, если вы добавили статус в качестве колонки:

select Name, tbl_sections.StatusId, 
     (select COUNT(1) from tbl_projects where statusId = tbl_sections.StatusId) as N 
from tbl_sections 
left join tbl_section_names on tbl_section_names.Id = NameId 

Я не знаю структуру вашей базы данных, но я, если вы хотите, чтобы подсчет количества секций на имя, может быть, как это. В основном это будет выглядеть в результате объединения, а затем суммировать его, говоря вам, сколько раз встречается каждое уникальное имя:

select Name, count(*) 
from tbl_sections 
left join tbl_section_names on tbl_section_names.Id = NameId 
Group By Name 
0

Try и дать этому идти.

select Name, 
    SUM(select COUNT(1) from tbl_projects where statusId = tbl_sections.StatusId) as N 
from tbl_sections 
left join tbl_section_names on tbl_section_names.Id = NameId 
group by Name 
Смежные вопросы