具有左外连接的列的和

时间:2012-06-28 15:08:51

标签: tsql

我正在尝试获取至少拥有记录授权人员的所有记录的计数。基本上,记录可以有多个人与之相关联。我想返回总记录数,授权记录总数(其中至少有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

1 个答案:

答案 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
相关问题