我已经使用了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