select [name] from (select * From [TB] where language = '1' and language = '5') a group by [name]

解决方案 »

  1.   

    select distinct name from tb where language in(1,2,5)
      

  2.   

    --用动态语句
    declare @tj varchar(20)
    set @tj='1,5' --动态条件
    exec('select * from tb where language in ('+@tj+')')
      

  3.   

    以上都不行的Cityfire(青团子) :这样一条数据也没有klan(因帅被判7年):这样只要符合有1或2或5的就会出来,但我要的是同时符合1和2和5的.
      

  4.   

    select  a.names 
    from ( select names from tb where language=1) a,
         ( select names from tb where language=2) b,
         ( select names from tb where language=5) c
    where  a.names=b.names and b.names=c.names
      

  5.   

    wsycrcrystal(231):方法是可以的,但条件是动态伸缩的.有时是1,2,5但有时是1,2,3,4,5,6,7又有时是1,那又么办呢?
      

  6.   

    select a.name from tb 
    where a.langue =  '1' 
    and exist (select * from tb where langue = '5' and name = a,name)
      

  7.   

    meiqingsong(阿飛) :
        还是那个问题,条件个数不是固定的.
      

  8.   

    这样:做一个存储过程:
    Create proc GetName
        @WhereStr varchar(100)
    as
    begin
        if len(@WhereStr)=0
        begin--如果参数长度为0,表示取所有name
            select name from TB
            return
        end
        declare @TmpTable table(ConID int identity(1,1),ConNum varchar(20))
        declare @PreStr varchar(100),@Pos int
        set @PreStr=@WhereStr
        while len(@WhereStr)>0
        begin--分离条件参数
            set @Pos=charindex(',',@WhereStr)
            if @Pos!=0
                set @PreStr=substring(@WhereStr,1,@Pos-1)
            else if @Pos=0
            begin
                set @PreStr=@WhereStr
                set @Pos=len(@whereStr)
            end
            insert into @TmpTable(ConNum) values(@PreStr)
            set @PreStr=@WhereStr
            set @WhereStr=substring(@PreStr,@Pos+1,len(@PreStr)-@Pos)
        end
        declare @MaxID int
        select @MaxID=max(ConID) from @TmpTable
        if @MaxID is null
        begin--参数没有发现,取所有的name
            select name from TB
            return
        end
        declare @CircleNum int,@CurNum varchar(10)
        declare @ExecStr varchar(2000)
        set @CircleNum=1
        set @ExecStr='select a.name from '
        while @CircleNum<=@MaxID
        begin--拼接执行语句
            select @CurNum=ConNum from @TmpTable where ConID=@CircleNum
            if @CircleNum=1
                set @ExecStr=@ExecStr+'(select name from TB where language='+@CurNum+') a '
            else
                set @ExecStr=@ExecStr+' inner join (select name from TB where language='+@CurNum+') '+char(ascii(a)-1+@CircleNum)+' on a.name='+char(ascii(a)-1+@CircleNum)+'.name '
            set @CircleNum=@CircleNum+1
        end
        --执行语句
        exec sp_execsql @ExecStr
    end
    go没有测试,如果采用请自己调试一下。
    上述存储过程应该比较灵活,给的参数是你的条件值,每个中间用半角','号隔开。
    使用方法跟select语句差不多,返回也是一个记录集。
    使用时,该语句:exec GetName '1,2,5'  这样参数就可以随便给,只有参数的总长度不超过参数给定的类型长度。
      

  9.   

    条件的项是动态组合而成的不是固定个数的,它们是并的关系.就是说:条件有机会是要符合language里有等于1及等于2及等于3的name项(就是language=(1,2,3))条件有机会是要符合language里有等于1及等于2及等于3及等于5(就是language=(1,2,3,5))......也可能就要language=1的单一条件(就是language=1).
    大家明白吗?