(1)数据表item
pro_id pro_name
 1       电视
 2       空调
 4       冰箱
...
如何形成这样的字符串 1,2,4
(2)
字符串str1='1,2,4'
字符串str2='2,5,6'
select * from product where pro_id in (相同的值只取一个,既:1,2,4,5,6)
应该如何写?谢谢大家!

解决方案 »

  1.   

    把满足一定条件的数据用逗号分隔这可能也是一个很常用的语句了,经常出现在一对多的关系中对外展示,要求把子表中的数据取出来用逗号或者其他符号分隔开/*把满足 t2.NodeID=t1.NodeID的tableA 的字段NodeName 以逗号分隔开合并为一个字段输出*/select *,stuff((select ',' + t1.NodeName from tableA t1,tableB t2
                    where   t2.NodeID=t1.NodeID
                    for xml path('')) , 1 , 1 , '')  as text
    from tableA
      

  2.   

    --1
    select stuff((select ','+pro_id from item for xml path('')),1,1,'')
    --2
    select * from product where charindex(rtrim(pro_id)+',',str1+','+str2+',')>0
    --不用考虑相同只去一个,这只是条件而已,重不重复不影响结果
      

  3.   


    declare @table table (pro_id int,pro_name varchar(4))
    insert into @table
    select 1,'电视' union all
    select 2,'空调' union all
    select 4,'冰箱' union all
    select 5,'钢琴'declare @str1 varchar(2000),@str2 varchar(2000)
    set @str1='1,3,4';set @str2='2,4,6'SELECT * FROM @table 
    WHERE CHARINDEX(','+CAST(pro_id AS VARCHAR(4))+',',','+@str1+',')>0
    or CHARINDEX(','+CAST(pro_id AS VARCHAR(4))+',',','+@str2+',')>0
    /*
    pro_id      pro_name
    ----------- --------
    1           电视
    2           空调
    4           冰箱
    */
      

  4.   

    select stuff((select ','+pro_id from item for xml path('')),1,1,'') from item
    select * from product where charindex(rtrim(pro_id)+',',str1+','+str2+',')>0