我正在尝试获取至少拥有记录授权人员的所有记录的计数。基本上,记录可以有多个人与之相关联。我想返回总记录数,授权记录总数(其中至少有1人获得授权),以及未授权与记录相关联的未授权记录总数。如果每个记录授权一个人或者如果有3个人获得该记录的授权,则无关紧要,应该向授权计数器添加1个。
当前查询为每个记录添加的每个人增加了Auth和Non auth,而不是每个记录增加一个。如果没有人被分配到也应该计入Not Auth的记录。
SELECT Count(DISTINCT Record.RecordID) AS TotalRecords,
SUM(CASE WHEN People.PersonLevel = 1 THEN 1 ELSE 0 END) AS Authorized,
SUM(CASE WHEN People.PersonLevel <> 1 THEN 1 ELSE 0 END) AS NotAuthorized
FROM Record
LEFT OUTER JOIN RecordPeople ON Record.RecordID = RecordPeople.RecordID
LEFT OUTER JOIN People ON RecordPeople.PersonID = People.PersonID
答案 0 :(得分:0)
这样的东西似乎很丑陋(未经测试),但应该更好。
由于你必须按记录总和(至少1个授权或不是总和),我认为没有子查询你就不能得到它......
SELECT
COUNT(a.record) AS TotalRecords,
SUM(a.authorizedRecord),
SUM(a.nonAuthorizedRecord) FROM
(SELECT
r.RecordId AS record,
CASE WHEN SUM(CASE WHEN p.PersonLevel = 1 THEN 1 ELSE 0 END) >= 1 THEN 1 ELSE 0 END AS authorizedRecord,
CASE WHEN SUM(CASE WHEN COALESCE(p.PersonLevel, 0) <> 1 THEN 1 ELSE 0)>=1 THEN 1 ELSE 0 END AS nonAuthorizedRecord
FROM Record r
LEFT OUTER JOIN RecordPeople ON Record.RecordID = RecordPeople.RecordID
LEFT OUTER JOIN People ON RecordPeople.PersonID = People.PersonID
GROUP BY r.RecordId
) AS a