访问SQL - 我需要一个查询来根据几个条件计算字段

时间:2017-03-01 20:36:19

标签: sql vba ms-access access-vba

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

我在保险索赔行业工作,我们将保险索赔作为电子档案。主管会对这些文件进行审核,简称为文件审核。我有一个Access数据库,我用它来跟踪工作中的所有文件审查。

有时作为理赔主管,我们正在对我们的OWN员工进行文件审核,这意味着该员工向我报告。其他时候,我正在向一位向不同主管报告的员工进行文件审查。

我的主表看起来像这样(包含许多其他列),每条记录都表示文件检查:

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是评论者列中列出评论者姓名的次数

自我评价是在评论者列中列出评论者姓名的次数,其名称等于该特定记录的主管名称

交叉评论是在评论者列中列出评论者姓名的次数,其名称不等于该特定记录的主管名称

Bob共有3条评论,1条评论,2条评论

Amy共有2条评论,0条评论,2条评论

Dean共有3条评论,2条评论,1条评论

John有1条评论,1条评论,0条评论

Shawn有1条评论,0自己,1个交叉

我知道这对我来说似乎很复杂,但我希望有人可以协助让它变得更容易。我只是使用Access,因此任何oracle或其他SQL语法都可能无效。

1 个答案:

答案 0 :(得分:0)

这里有一个简单的技巧:对指标函数进行求和。

自我评价的指标功能为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

在除Access之外的其他环境中,指标功能通常是褪色:

CASE WHEN Supervisor = Reviewer THEN 1 ELSE 0 END