现在我有一个表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')

解决方案 »

  1.   

    select * from (SELECT count(用户) as jscount
          ,角色
      FROM t1  group by 角色  ) tab where  jscount>2
      

  2.   

    2005的
    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
      

  3.   

    select * from (SELECT count(用户) as jscount
          ,角色
      FROM t1  group by 角色  ) tab where  jscount>2
    原始的解决方法
      

  4.   


    A,B,C的结果应该是js2啊,这才是我要的啊
      

  5.   


    我要的不是用户个数,而是指定某些用户,如A,B,C,SQL里肯定要出现这些参数的
      

  6.   

    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')
    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 行)