我可以在“ ub.Id”列上返回84行,且选择的内容不同。
当我在该列上有条件地计算出不重复或求和时,返回的值不正确。
我知道这个问题上有一些话题,但是我找不到解决方案,我一定会丢失一些东西。它对我来说直截了当。返回了84行,但是我一定错过了一个组或其他东西,而且我已经玩了很多。
焦点在最后3列
SELECT DISTINCT
o.Organization_Name,
ui.DisplayName,
ui.NumLogins,
COUNT(uw.Title) Assigned,
SUM(CASE WHEN uw.Status IS NULL THEN 1 ELSE 0 END) NotStarted,
SUM(CASE WHEN uw.Status = 'incomplete' THEN 1 ELSE 0 END) InProgress,
SUM(CASE WHEN uw.grade >=80 THEN 1 ELSE 0 END) Completed,
COUNT(DISTINCT ub.Id) ShouldBe84a,
SUM(CASE WHEN ub.Id > 0 THEN 1 ELSE 0 END) ShouldBe84b,
ub.Id
FROM @Organizations o
INNER JOIN @UserInfo ui on ui.OrgId = o.OrgId
LEFT JOIN @UserWorkshop uw on uw.UserId = ui.UserId
LEFT JOIN @UserBehavior ub on ub.UserId = ui.UserId
WHERE username = 'user@email.com'
AND ub.Id IS NOT NULL
GROUP BY o.Organization_Name,
ui.DisplayName,
ui.NumLogins,
ub.id;
非常感谢您的帮助,
男孩
**已解决EDIT感谢您的帮助,为我指明了正确的方向*
已解析的代码:
select o.Organization_Name,ui.DisplayName, ui.NumLogins,
count(distinct case when uw.Title Is Not Null then uw.Title else null end) Assigned,
count(distinct case when uw.Status Is Null then uw.Title else null end) NotStarted,
count(distinct case when uw.Status = 'incomplete' then uw.Title else null end) InProgress,
count(distinct case when uw.grade >=80 then uw.Grade else null end) Completed,
count(distinct case when ub.CaseStatus = 1 then ub.Id else null end) CasesSupported,
count(distinct case when ub.CaseOwnerId = ui.UserId then ub.Id else null end) CasesOwned
from @Organizations o
inner join @UserInfo ui on ui.OrgId = o.OrgId
left join @UserWorkshop uw on uw.UserId = ui.UserId
left join @UserBehavior ub on ub.UserId = ui.UserId
--left join @UserBehaviorDetails ubd on (ubd.Id=ub.Id and ubd.UserId=ub.UserId)
where username = 'user@email.com'
and ub.Id is not null
group by o.Organization_Name,ui.DisplayName,ui.NumLogins
答案 0 :(得分:3)
您要为ub.Id
计算不同的值,但是您还要按同一列进行分组。
您需要从列列表和GROUP BY中删除ub.Id
,以使汇总正确。使用GROUP BY时,您也不需要DISTINCT。
SELECT
o.Organization_Name,
ui.DisplayName,
ui.NumLogins,
COUNT(uw.Title) Assigned,
SUM(CASE WHEN uw.Status IS NULL THEN 1 ELSE 0 END) NotStarted,
SUM(CASE WHEN uw.Status = 'incomplete' THEN 1 ELSE 0 END) InProgress,
SUM(CASE WHEN uw.grade >=80 THEN 1 ELSE 0 END) Completed,
COUNT(DISTINCT ub.Id) ShouldBe84a,
SUM(CASE WHEN ub.Id > 0 THEN 1 ELSE 0 END) ShouldBe84b
FROM @Organizations o
INNER JOIN @UserInfo ui on ui.OrgId = o.OrgId
LEFT JOIN @UserWorkshop uw on uw.UserId = ui.UserId
LEFT JOIN @UserBehavior ub on ub.UserId = ui.UserId
WHERE username = 'user@email.com'
AND ub.Id IS NOT NULL
GROUP BY o.Organization_Name,
ui.DisplayName,
ui.NumLogins;