Что-то вроде (я уверен, что есть опечатки):
SELECT
A.RegTimePartnerID AS OrganiationID,
P.PartnerName AS OrganiationName,
(
SELECT COUNT(DISTINCT dta.[UniqueID])
FROM dbo.[DenormTraningActivity](NOLOCK) AS dta
WHERE dta.[RegTimePartnerID] = P.[PartnerID]
) AS PUIDCount,
(
SELECT COUNT(DISTINCT dta.[EventID])
FROM dbo.[DenormTraningActivity](NOLOCK) AS dta
WHERE dta.[RegTimePartnerID] = P.[PartnerID]
) AS EventCount,
(
SELECT COUNT(DISTINCT dta.[EventID])
FROM dbo.[DenormTrainingActivity](NOLOCK) AS dta
WHERE dta.[CourseTypeid] = 10
AND dta.[RegTimePartnerId] = P.[PartnerID]
) AS SalesCount,
(
SELECT COUNT(DISTINCT dta.[EventID])
FROM dbo.[DenormTrainingActivity](NOLOCK) AS dta
WHERE dta.[CourseTypeid] = 20
AND dta.[RegTimePartnerID] = P.[PartnerID]
) AS TechCount,
CASE
WHEN (
SELECT COUNT(DISTINCT dta.[EventID])
FROM dbo.[DenormTrainingActivity](NOLOCK) AS dta
WHERE dta.[EventCategory] IN ('Live-ILT', 'Live-Online')
AND dta.[RegTimePartnerID] = P.[PartnerID]
) = 0 THEN 100
ELSE (
SELECT COUNT(DISTINCT dta.[EventID])
FROM dbo.[DenormTrainingActivity](NOLOCK) AS dta
WHERE dta.[EventCategory] IN ('Live-ILT', 'Live-Online')
AND dta.[RegTimePartnerID] = P.[PartnerID]
)*100/
(
SELECT COUNT(DISTINCT dta.[EventID])
FROM dbo.[DenormTrainingActivity](NOLOCK) AS dta
WHERE dta.[EventCategory] NOT IN ('Live-ILT', 'Live-Online')
AND dta.[RegTimePartnerID] = P.[PartnerID]
)
END AS LivevsOndemand
FROM
dbo.Partner P
WHERE P.[PartnerID] <> 0
Я думал, что, возможно, вложенные подзапросы будут дешевле, чем INNER JOIN / COUNT / GROUPBY. Вероятно, нет, поскольку каждый подзапрос должен оцениваться для каждой записи в таблице Partner.