Tsql 具有左外部联接的列的和

Tsql 具有左外部联接的列的和,tsql,Tsql,我正在尝试获取所有记录的计数,这些记录至少包含在记录上授权的人员上。基本上,一个记录可以有多个人与之关联。我想返回总记录数、总授权记录数(其中至少有1人获得授权)和总未授权记录数(其中没有与记录相关的人员获得授权)。不管每个记录是否有一个人被授权,或者该记录是否有3个人被授权,授权计数器应该加1 当前查询是为每个记录添加的每个人递增Auth和Non Auth,而不是为每个记录递增一个。如果没有为记录分配人员,则该记录也应计入Not Auth SELECT Count(DISTINCT Recor

我正在尝试获取所有记录的计数,这些记录至少包含在记录上授权的人员上。基本上,一个记录可以有多个人与之关联。我想返回总记录数、总授权记录数(其中至少有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个已授权或未授权的总和进行求和,因此我认为您无法在没有子查询的情况下获得它

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

这只解决了将空值添加到未授权计数的问题。如果我在同一条记录中添加两个未经授权的人,总计数将增加2,而不是1。@Matt抱歉,我似乎读得太快了。我现在读慢一点!