Посмотрел другие вопросы, пробовал разные вещи, но все равно возвращал более одной строки.
Проблема с объединением на 2 таблицы, с предложением group by. Должна быть возвращена только одна строка, сгруппированная по идентификатору службы.
SELECT
serviceID,
serviceName,
FullCount,
WaitingCount,
InProgressCount
from (
select
a.serviceID,
serviceName,
count(applicantID) FullCount,
ISNULL(SUM(CASE WHEN status = 0 THEN 1 ELSE 0 END),0) AS WaitingCount,
ISNULL(SUM(CASE WHEN status = 1 THEN 1 ELSE 0 END),0) AS InProgressCount
from Products s
left join Assigns a on a.serviceID = s.productID
WHERE s.clientID = @ClientID
group by serviceID, serviceName
UNION
select
s.serviceID,
p.serviceName,
count(s.ApplicantID) FullCount,
ISNULL(SUM(CASE WHEN s.status = 0 THEN 1 ELSE 0 END),0) AS WaitingCount,
ISNULL(SUM(CASE WHEN s.status = 1 THEN 1 ELSE 0 END),0) AS InProgressCount
from Legacies s
Left Join Products p on s.serviceID = p.productID
WHERE s.client = @CompanyName
group by serviceID, serviceName
) t
GROUP BY serviceID, serviceName
Я всегда получаю 2 возвращенные строки, по одной из каждой таблицы. Мне нужно сгруппировать их вместе, чтобы он возвращал только 1 строку на основе servicedID.
Данные, которые я пытаюсь вернуть, взяты из следующих таблиц ..
Таблица продуктов
productID serviceName
-------------------------
1 Gold Service
2 Silver Service
3 Bronze Service
Таблица назначений
ApplicantID serviceID status
-------------------------------------
1 1 0
2 1 0
3 1 1
4 2 0
5 1 1
Таблица Legacies
ApplicantID serviceID status
-------------------------------------
1 1 0
2 1 0
3 1 0
4 2 0
5 1 1
Результат, который я пытаюсь получить, - одна строка для идентификатора службы, показывающая, сколько кандидатов на это служба в таблице Legacies и Assigns, что-то вроде: -
serviceID serviceName FullCount WaitingCount InProgressCount
----------------------------------------------------------------
1 Gold Service 8 5 3
2 Silver Service 2 2 0
3 Bronze Service 0 0 0
FullCount - это общее количество претендентов на каждую услугу, WaitingCount - количество претендентов на службу со статусом «0» и InProgressCount - это номер этой услуги со статусом «1»