VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 796|回复: 5

一道让人头痛的题目

[复制链接]

1

主题

13

帖子

12.00

积分

新手上路

Rank: 1

积分
12.00
发表于 2020-1-6 23:40:01 | 显示全部楼层 |阅读模式
QXXH   QXMC
1 发文填写
2 发文审批
3 收文填写
4 收文审批

权限-人员对应表XT_QXRY,如果某人有某个权限,则在此表有条记录(序号,权限序号,用户名称)
XH QXXH YHMC
1 2 张三
2 3 张三
3 1 李四
4 3 李四
5 4 李四
我想产生一个这样的查询:列出所有用户有哪些权限,同时列出所有的权限.
查询结果如下:
XH  QXXH      QXMC   YHMC       是否有此权限
1    1   发文填写    张三       false
2    2   发文审批    张三       true
3    3   收文填写    张三       true
4    4   收文审批    张三       false
5    1   发文填写    李四       true
6    2   发文审批    李四       false
7    3   收文填写    李四       true
8    4   收文审批    李四       true
回复

使用道具 举报

0

主题

211

帖子

108.00

积分

新手上路

Rank: 1

积分
108.00
发表于 2020-1-7 08:18:02 | 显示全部楼层
create table A(QXXH int, QXMC nvarchar(10))
insert A select 1, '发文填写'
union all select 2, '发文审批'
union all select 3, '收文填写'
union all select 4, '收文审批'

create table B(XH int, QXXH int, YHMC nvarchar(10))
insert B select 1, 2, '张三'
union all select 2, 3, '张三'
union all select 3, 1, '李四'
union all select 4, 3, '李四'
union all select 5, 4, '李四'

select tmp.*, 是否有此权限=case when B.XH is null then 'False' else 'True' end from
(
select * from
        (select distinct YHMC from B) as B
        cross join A
)tmp
left join B on tmp.QXXH=B.QXXH and tmp.YHMC=B.YHMC

--result
YHMC       QXXH        QXMC       是否有此权限
---------- ----------- ---------- ------
李四         1           发文填写       True
李四         2           发文审批       False
李四         3           收文填写       True
李四         4           收文审批       True
张三         1           发文填写       False
张三         2           发文审批       True
张三         3           收文填写       True
张三         4           收文审批       False

(8 row(s) affected)
回复

使用道具 举报

0

主题

48

帖子

30.00

积分

新手上路

Rank: 1

积分
30.00
发表于 2020-1-7 08:33:01 | 显示全部楼层
select a.xh,b.qxxh,b.qxmc,a.yhmc,qxf=case when b.qxxh is null then 0 else 1 end
from xt_qxry a full join table1 on a.qxxh=b.qxxh
回复

使用道具 举报

0

主题

17

帖子

12.00

积分

新手上路

Rank: 1

积分
12.00
发表于 2020-1-7 11:03:01 | 显示全部楼层
create table tmp1(QXXH int,QXMC nvarchar(20))
go

create table tmp2(XH int,QXXH int,YHMC nvarchar(20))

go

select c.*,是否有权限=case when d.xh is null then 'false' else 'true' end
from
(
select * from tmp1 a cross join(select distinct yhmc from tmp2) b
) c

left join tmp2 d on c.qxxh=d.qxxh and c.yhmc=d.yhmc

回复

使用道具 举报

1

主题

13

帖子

12.00

积分

新手上路

Rank: 1

积分
12.00
 楼主| 发表于 2020-1-7 11:27:01 | 显示全部楼层
恩,谢谢fanfan1980
回复

使用道具 举报

0

主题

8

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
发表于 2020-1-7 12:27:01 | 显示全部楼层
SELECT B.YHMC,A.QXXH,A.QXMC,'TRUE' AS QX
FROM T_QX A,T_QX2 B
WHERE B.YHMC='张三' AND A.QXXH=B.QXXH
UNION
SELECT distinct B.YHMC,A.QXXH,A.QXMC,'FALSE' AS QX
FROM T_QX A,T_QX2 B where B.YHMC='张三' AND
a.QXXH NOT IN
( SELECT QXXH FROM T_QX2 WHERE YHMC='张三' )
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表