0

レコードで承認されている人が少なくとも 1 人いるすべてのレコードのカウントを取得しようとしています。基本的に、レコードには複数の人物を関連付けることができます。Total Records の数、少なくとも 1 人が承認されている Authorized Records の合計数、およびレコードに関連付けられている人物が承認されていない NotAuthorized レコードの合計数を返したいと考えています。レコードごとに 1 人が承認されているか、そのレコードに対して 3 人が承認されているかは問題ではありません。これにより、承認済みカウンターに 1 が追加されます。

現在のクエリは、レコードごとに 1 人ではなく、レコードごとに追加された人ごとに認証と非認証をインクリメントしています。レコードに人が割り当てられていない場合、そのレコードも 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
4

1 に答える 1

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
于 2012-06-28T15:12:41.840 に答える