stringgrid中表格内容为
item   description
1      a,b,c,d
2      e,f,g,h
3      z,a,y
4      za,fd,p,b
...现在需要实现的算法是,如果在记录中的description中出现重复的值,则列出记录的item值..例如
item为1和3的两条记录中,description中均有a,则列出1,3 这两行(很显然,item为4的是za,不是a,故item为4这条记录不列出)。。

解决方案 »

  1.   

    我的想法是,把description中的字段进行拆解,看你的记录中可以用,来作为分隔符
    然后将每一条记录拆分为多条记录存储在一个临时表中然后利用sql语句去判断描述相同的,取其id,然后做为显示的条件,在grid中显示出来即可.
      

  2.   

    我感觉:
    现在拆开太迟了,拆开要用游标,500条,快不了哪里去;
    除非description字段内容‘a,b,c,d’个数最多可以确定下来并且不多,可以避开游标。
      

  3.   

    楼上的。。
    stringgrid中的数据是从excel中直接导入进来的。。没办法的事情啊。。
      

  4.   

    可以这样实现:
    前题:1):建两个数据结构一样的数据表,以下例子的两个表名分别是: tlanme,tlanmeb
        数据结构 ID INT(对应item)
                VALUES VARCHAR 50(对应description)
         2):你要想办法将excel中的数据导入到tlanme.
         
         3):用一个dbgrid控件连接ADOQUERY控件     4):在ADOQUERY控件中执行以下语句 SELECT TOP 8000     id = IDENTITY(int, 1, 1) INTO # FROM syscolumns a, syscolumns bINSERT INTO tlanmeb(id,[values]) SELECT     A.id,     SUBSTRING(A.[values], B.id, CHARINDEX(',', A.[values] + ',', B.id) - B.id) tFROM tlanme A, # BWHERE SUBSTRING(',' + A.[values], B.id, 1) = ','DROP TABLE #
    select * from  tlanme where [id] in(select [id] from tlanmeb where [values] in (select [values] from tlanmeb GROUP BY  [values] having  count(*)>1))
    -----------结果------------------
    1 a,b,c,d
    3 z,a,y
    4 za,fd,p,b 这样得到了你想要的结果了,1与3因为大家都含有字母a所以重复,而1与4因为都含有字母b所以重复.
      

  5.   

    这段可以做成存储过程: SELECT TOP 8000     id = IDENTITY(int, 1, 1) INTO # FROM syscolumns a, syscolumns bINSERT INTO tlanmeb(id,[values]) SELECT     A.id,     SUBSTRING(A.[values], B.id, CHARINDEX(',', A.[values] + ',', B.id) - B.id) tFROM tlanme A, # BWHERE SUBSTRING(',' + A.[values], B.id, 1) = ','DROP TABLE #这段是ADOQUERY执行的SQL语句:select * from  tlanme where [id] in(select [id] from tlanmeb where [values] in (select [values] from tlanmeb GROUP BY  [values] having  count(*)>1))
      

  6.   

    对于导入EXCEL到数据表的方法,用DTS语句,只还过是一分几秒的事情.