gpt4 book ai didi

asp.net - 带条件的 SQL Group By

转载 作者:行者123 更新时间:2023-12-02 07:09:52 25 4
gpt4 key购买 nike

场景:我需要为 ASP.Net 应用程序的审计员创建报告。我有一个程序可以解析授权标记目录中 web.config 文件的 XML,并创建一个报告,提供哪些用户可以访问站点结构中的哪个文件夹。报告如下所示。

UserName, Firstname, LastName, Directory, Roles, Access, LastLoginDate

enter image description here

问题:正如您从报告中看到的那样,某些目录(其中包含 GISMO 的中间列)显示两次,允许和拒绝用户。我想知道是否有一种方法可以将结果分组,如果有一行允许目录,则不显示拒绝的,否则会显示。

或者,如果这可以在 VB.net/C# 中操作,那也是一个选项。它返回那里并被输入到 Excel 电子表格中。

感谢任何帮助。提前致谢。

编辑:我应该解释得更好。如果目录中不允许用户,我仍然需要拒绝行来显示。但如果它们被允许,那么显示拒绝行就没有意义了。

最佳答案

这适用于 Oracle 数据库,因此据我所知,它应该可以在 SQL Server 上运行或让您接近 SQL Server支持其主要组成部分,即 CASE 操作。

CREATE TABLE user_permissions (
user_role VARCHAR2(10) NOT NULL,
dir VARCHAR2(10) NOT NULL,
user_access VARCHAR2(5) NOT NULL
);

INSERT INTO user_permissions VALUES ('admin', 'dir1', 'allow');
INSERT INTO user_permissions VALUES ('admin', 'dir2', 'allow');
INSERT INTO user_permissions VALUES ('power', 'dir1', 'allow'); -- Allow and Deny dir1
INSERT INTO user_permissions VALUES ('power', 'dir1', 'deny');
INSERT INTO user_permissions VALUES ('power', 'dir2', 'deny');
COMMIT;


SELECT UNIQUE j.*
FROM (
SELECT user_role, dir,
MAX(CASE user_access WHEN 'allow' THEN 1 ELSE 0 END) allowFlag,
MAX(CASE user_access WHEN 'deny' THEN 1 ELSE 0 END) denyFlag
FROM user_permissions
GROUP BY user_role, dir
) t
JOIN user_permissions j ON (t.user_role = j.user_role AND t.dir = j.dir)
WHERE j.user_access = 'allow' OR (t.allowFlag = 0 and user_access = 'deny');

结果:

USER_ROLE  DIR        USER_ACCESS 
---------- ---------- -----------
admin dir1 allow
admin dir2 allow
power dir1 allow
power dir2 deny

基本上,您使用数据透视表将多行聚合成描述目录属性的一行。获得聚合行后,很容易比较您声明的属性以连接要显示的行。

关于asp.net - 带条件的 SQL Group By,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7082871/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com