我试图为用户创建一个SQL查询,用户应该在数据库中为该研究提供相应的授权访问权限。对于ex,如果用户拥有20条授权记录的总数,那么该用户应该拥有撤销记录的总数。如果没有,我们需要输入丢失的记录。
我创建了以下查询。该查询对于有单个授权记录供学习的用户运行良好,但如果用户有用于特定学习的多个授予记录,则该查询不起作用。
为了前夫。用户A有两个授权记录和一个撤销记录供学习ABC。下面的查询没有显示任何输出,因为该研究已经列出了撤消记录。
但我们只有一份撤销这项研究的记录。所以我想显示丢失的格兰特记录

SELECT Getdate() [RequestedDate],
Getdate() [ApprovedDate],
A.requestedfor,
'XXX' [ApprovedBy],
A.projectnumber,
'Revoke' [AccessRequestType]
FROM [dbo].[Table1] A
WHERE A.requestedfor = 1234
AND A.accessrequesttype = 'Grant'
AND NOT EXISTS (SELECT *
FROM [dbo].[Table1] B
WHERE B.requestedfor =1234
AND B.accessrequesttype = 'Revoke'
AND A.projectnumber = B.projectnumber
AND A.accessgroup = B. accessgroup
AND A.RequestedFor = B. RequestedFor
) 发布于 2022-02-08 09:26:24
通过对行编号,我们可以将授权与REVOKEs配对,并将不匹配/超额授权作为新的Revoke条目返回:
select
Getdate() [RequestedDate],
Getdate() [ApprovedDate],
A.requestedfor,
'XXX' [ApprovedBy],
A.projectnumber,
'Revoke' [AccessRequestType]
from (
SELECT requestedfor, projectnumber, seq=row_number() over (order by RequestedFor)
FROM Table1
where RequestedFor=1234
and AccessRequestType='Grant'
except
SELECT requestedfor, projectnumber, seq=row_number() over (order by RequestedFor)
FROM Table1
where RequestedFor=1234
and AccessRequestType='Revoke'
) a
```
@maxim's proposal should also work.https://stackoverflow.com/questions/71029527
复制相似问题