现在我有一个表t1,里面有两列:用户,角色,数据有:A js1
A js2
A js3
B js2
B js3
B js4
B js5
C js1
C js2
C js4
D js2
. .
. .
. .我想用sql语句把指定n个用户(如A,B,C)所共有的角色(角色交集)查出来,请问各位大侠们这个SQL该如何写?create table t1(
用户 varchar(20),
角色 varchar(20))
go
insert into t1 values('A','js1')
insert into t1 values('A','js2')
insert into t1 values('A','js3')
insert into t1 values('B','js2')
insert into t1 values('B','js3')
insert into t1 values('B','js4')
insert into t1 values('B','js5')
insert into t1 values('C','js1')
insert into t1 values('C','js2')
insert into t1 values('C','js4')
insert into t1 values('D','js2')
A js2
A js3
B js2
B js3
B js4
B js5
C js1
C js2
C js4
D js2
. .
. .
. .我想用sql语句把指定n个用户(如A,B,C)所共有的角色(角色交集)查出来,请问各位大侠们这个SQL该如何写?create table t1(
用户 varchar(20),
角色 varchar(20))
go
insert into t1 values('A','js1')
insert into t1 values('A','js2')
insert into t1 values('A','js3')
insert into t1 values('B','js2')
insert into t1 values('B','js3')
insert into t1 values('B','js4')
insert into t1 values('B','js5')
insert into t1 values('C','js1')
insert into t1 values('C','js2')
insert into t1 values('C','js4')
insert into t1 values('D','js2')
解决方案 »
- 回杭州老家找份软件开发工作
- 求复杂点的SQL语句一条!
- 非常复杂的的存储过程,高手们来研究这样能写么?
- 麻烦高手解答SQL2000的备份无法恢复(急救感激不尽!!)
- 数据库连接成功,但多次刷新会出现[DBNETLIB][ConnectionOpen (Connect()).]SQL Server 不存在或拒绝访问。
- 数据库查询优化
- 一个导数据的问题,大家来帮忙啊!
- sql7.0服务无法启动
- sql通过表名查询数据(在线等)
- 数据冲突、锁定问题(Under SQL Server 2000)
- 求像log explorer一样,分析SQL日志还原成语句的文档资料
- 在windows下是正常的,放到linux下就保错了,请高手赐教!!
,角色
FROM t1 group by 角色 ) tab where jscount>2
create table t1(
用户 varchar(20),
角色 varchar(20))
go
insert into t1 values('A','js1')
insert into t1 values('A','js2')
insert into t1 values('A','js3')
insert into t1 values('B','js2')
insert into t1 values('B','js3')
insert into t1 values('B','js4')
insert into t1 values('B','js5')
insert into t1 values('C','js1')
insert into t1 values('C','js2')
insert into t1 values('C','js4')
insert into t1 values('D','js2')select stuff(
(select distinct ','+角色 from t1 where 用户 in ('A','B','C') for xml path(''))
,1,1,'' )
结果
js1,js2,js3,js4,js5
,角色
FROM t1 group by 角色 ) tab where jscount>2
原始的解决方法
A,B,C的结果应该是js2啊,这才是我要的啊
我要的不是用户个数,而是指定某些用户,如A,B,C,SQL里肯定要出现这些参数的
用户 varchar(20),
角色 varchar(20))
go
insert into t1 values('A','js1')
insert into t1 values('A','js2')
insert into t1 values('A','js3')
insert into t1 values('B','js2')
insert into t1 values('B','js3')
insert into t1 values('B','js4')
insert into t1 values('B','js5')
insert into t1 values('C','js1')
insert into t1 values('C','js2')
insert into t1 values('C','js4')
insert into t1 values('D','js2')
DECLARE @用户 NVARCHAR(20)
SET @用户='A,B'
SELECT
角色,
COUNT(1)
FROM
T1
WHERE CHARINDEX(','+用户+',',','+@用户+',')>0
GROUP BY
角色
HAVING COUNT(1)>=LEN(@用户)-LEN(REPLACE(@用户,',',''))+1--DROP TABLE T1/*角色
-------------------- -----------
js2 2
js3 2(所影响的行数为 2 行)