【发布时间】:2016-03-30 18:47:15
【问题描述】:
我有一个选择语句,我正试图为报告做出选择。我有它提取数据和我需要的一切,但我注意到,因为我必须使用组,所以它会丢弃表中不存在的行。我怎样才能阻止它或使它起作用。
SELECT Sum(CASE WHEN direction = 'I' THEN 1 ELSE 0 END) InBound,
Sum(CASE WHEN direction = 'O' THEN 1 ELSE 0 END) OutBound,
Sum(CASE WHEN direction = 'I' THEN p.duration ELSE 0 END) InBoundTime,
Sum(CASE WHEN direction = 'O' THEN p.duration ELSE 0 END) OutBoundTime,
u.fullname,
( CASE
WHEN EXISTS (SELECT g.goalamount
FROM [tblbrokergoals] AS g
WHERE ( g.goaldate BETWEEN
'2016-03-21' AND '2016-03-27' ))
THEN
g.goalamount
ELSE 0
END ) AS GoalAmount
FROM [tblphonelogs] AS p
LEFT JOIN [tblusers] AS u
ON u.fullname = p.phonename
LEFT OUTER JOIN [tblbrokergoals] AS g
ON u.fullname = g.brokername
WHERE ( calldatetime BETWEEN '2016-03-21' AND '2016-03-27' )
AND ( u.userid IS NOT NULL )
AND ( u.direxclude <> '11' )
AND u.termdate IS NULL
AND ( g.goaldate BETWEEN '2016-03-21' AND '2016-03-27' )
GROUP BY u.fullname,
g.goalamount;
当用户在 BrokerGoals 中时,这可以工作并获取所有数据,但是当用户不在代理目标中时,它只会删除返回结果集上的该行。当 brokergoals 表中不存在用户将该值设置为 0 或 -- 所以该行不会被删除时,我该如何获取它。
【问题讨论】:
-
问题是你需要一个额外的
LEFT JOIN。我只是在几分钟前回答了几乎完全相同的问题。让我知道是否有帮助stackoverflow.com/a/36317252/3470178 -
我没有在数据库中创建新表的权限。有时用户在经纪人目标中,有时他们不取决于他们是否在办公室,但如果他们在经纪人目标中没有价值,它仍然应该显示 0。