需要两个计算字段但基于不同的where子句

时间:2013-11-21 18:45:25

标签: sql sql-server sql-server-2012

我有一张包含铅金额,optyid,员工姓名和配额的表格。

我想写一个查询,让我可以获得员工的平均潜在客户金额和配额总和。

我认为这很容易,但问题是,对于不包含optyid的行,超前金额显示为0,铅金额显示为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拉出一次? TABLE太大了,有两个子查询需要很长时间才能完成。我知道我可以使用左连接到同一个表,但我认为这不会节省大量时间,因为它仍然需要两次查询。

我感谢任何输入

1 个答案:

答案 0 :(得分: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