访问SQL-我需要一个查询来根据几个标准计数字段



我已经使用了stackoverflow多年了,通常我能够通过搜索找到所需的东西,但是我很抱歉,我找不到这样的示例。我对这些东西非常陌生,但喜欢在工作中进行协助进行各种项目。

我在保险索赔行业工作,我们将保险索赔作为电子档案。主管对这些文件进行审查,简单地称为文件审核。我有一个访问DB,用于跟踪工作中所有文件评论。

有时,作为主管主管,我们正在对自己的同事进行文件审查,这意味着向我报告的同事报告。其他时候,我正在对向其他主管报告的同事进行文件审查。

我的主表看起来像这样(还有许多其他列),每个记录都表示文件评论:

ClaimNumber | Supervisor | Reviewer
----------- | -----------| ------------
1---------- | ---Bob-----| Bob 
2---------- | ---Bob-----| Amy 
3---------- | ---John----| Amy 
4---------- | ---John----| Dean
5---------- | ---John----| John 
6---------- | ---Dean----| Dean 
7---------- | ---Dean----| Dean 
8---------- | ---Dean----| Bob 
9---------- | ---Kyle----| Bob
10--------- | ---Bob-----| Shawn 

根据是否使用了加入,请注意,有时在审阅者列中未列出主管名称。同样,有时在"主管"列中未列出审阅者名称。

所以,我需要一个返回的查询

Reviewer  ------  TotalReviews ----  Self_Reviews ---- Cross_Reviews

评论者是所有独特的审稿人

TotalReviews是评论者名称在评论者列中列出的次数

列出了多少次。

自我评论是在审稿人列中列出了审稿人名称的数量,其中其名称等于该特定记录的主管名称

交叉评论是在审稿人列中列出了审稿人名称的数量,其中其名称不等于该特定记录的主管名称

鲍勃共有3个评论,1个自我,2个十字

Amy有2个评论,总计0,2个Cross

院长共有3个评论,2个自我,1个十字架

约翰有1个评论,1个自我,0 Cross

肖恩有1个评论,0自我,1个十字

我知道这对我来说似乎很复杂,但我希望有人可以帮助它变得更加容易。我只是在使用访问,因此任何Oracle或其他SQL语法都可能不起作用。

您可以在此处使用一个简单的技巧:总结指示器函数。

自我评论的指标函数将是Switch(Supervisor = Reviewer,1,True,0)

导致以下查询:

SELECT 
  T.Reviewer, 
  COUNT(*) AS TotalReviews, 
  SUM(Switch(T.Supervisor = T.Reviewer,1,True,0)) AS Self_Reviews,
  SUM(Switch(T.Supervisor <> T.Reviewer,1,True,0)) AS Cross_Reviews 
FROM TableName T
GROUP BY T.Reviewer

在访问以外的其他环境中,指示器函数通常是flllllllllllllllllllllllll的。

CASE WHEN Supervisor = Reviewer THEN 1 ELSE 0 END

最新更新