2013-11-21 4 views
0

У меня есть таблица с количеством свинца, optyid, именем сотрудника и квотой.Нужно два вычисленного поля, но на основе разных статей where

Я хотел бы написать запрос, который позволяет мне получить среднее количество свинца и сумму квоты от сотрудника.

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

SELECT 
employeename, 
avg(leadamount) AS [avglead], 
0 AS QUOTA 
FROM TABLE 
WHERE TABLE.optyid IS NOT NULL 
GROUP BY employeename 

UNION 

SELECT 
employeename, 
0 AS [avglead], 
sum(quota) AS [QUOTA] 
FROM TABLE 
WHERE TABLE.optyid IS NULL 
GROUP BY employeename 

Есть ли все равно, чтобы объединить их вместе, чтобы я только вытащил из таблицы один раз? ТАБЛИЦА настолько велика, что для двух подзапросов требуется много времени. Я знаю, что, вероятно, я мог бы использовать левое соединение в одной таблице, но я не думаю, что это сэкономит много времени, поскольку ему еще нужно дважды запросить TABLE.

Я ценю любые входы

ответ

1
SELECT 
employeename, 
avg(CASE WHEN TABLE.optyid IS NULL THEN leadamount END) AS [avglead], 
sum(CASE WHEN TABLE.optyid IS NOT NULL THEN quota END) AS [QUOTA] 
FROM TABLE 
GROUP BY employeename 
+0

спасибо что работал отлично! – user2669043

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