create table T(perID int,paintID int)
insert into T select 1,1
insert into T select 1,2
insert into T select 1,5
insert into T select 1,7
insert into T select 1,11
insert into T select 2,12
insert into T select 2,1
insert into T select 2,4
insert into T select 2,6
insert into T select 2,9
insert into T select 2,11
insert into T select 3,8
insert into T select 3,11
insert into T select 4,1
insert into T select 4,2
insert into T select 5,5
insert into T select 5,8create table #(paint int)
declare @s1 varchar(30),@s2 varchar(30)
set @s1='1,11'  --會1和11的人
set @s2='1,11'  --會1或者11的人declare @sql varchar(500)
declare @cnt int
select @cnt=len(@s1)-len(replace(@s1,',',''))+1
set @sql='select '+replace(@s1,',',' union all select ')
insert into # exec(@sql)--@s1
select perID
from( 
select T.* from T
inner join # on paintID=paint) A
group by perID
having count(*)=@cnt/*
PerID
---------
1
2
*/
--@s2
exec('select distinct perID from T where paintID in ('+@s2+')')
/*
PerID
------------
1
2
3
4
*/
drop table #,T

解决方案 »

  1.   


    create table T(perID int,PaintID  int,PaintKind varchar(50))
    insert into T select 1,1,'国画'
    insert into T select 1,2,'油画'
    insert into T select 1,5,'水彩粉画'
    insert into T select 1,7,'年画'
    insert into T select 1,11,'漆画'
    insert into T select 1,12,'插图'
    insert into T select 2,1,'国画'
    insert into T select 2,4,'雕塑'
    insert into T select 2,6,'壁画'
    insert into T select 2,8,'连环画'
    insert into T select 2,9,'宣传画'
    insert into T select 2,11,'漆画'
    insert into T select 3,8,'连环画'
    insert into T select 3,11,'漆画'
    insert into T select 4,1,'国画'
    insert into T select 4,2,'油画'
    insert into T select 5,5,'水彩粉画'
    insert into T select 5,8,'连环画'(1)这些作家既擅长"国画" 还擅长"漆画" 
    select perid from t where PaintKind in ('国画','漆画') group by perid having count(1)>=2(2)这些作家会"国画"或者会"漆画" 
    select perid from t where PaintKind in ('国画','漆画') group by perid having count(1)>=1