当前页面: 开发资料首页 → J2SE 专题 → 一个比较麻烦的算法
一个比较麻烦的算法
摘要: 一个比较麻烦的算法
我现在有下列的表格:
a 1 11 111
a 1 11 111
a 1 11 111
b 2 22 222
b 2 21 222
b 2 22 222
c 3 33 333
c 3 33 333
以第一列为分组依据,就是说前三个是一组,中间三个是一组,后两个是一组。
现在发现第二组的中间那列21,和该组的其他列的内容不一致(22),所以要将该组(b)的所有第二列都变成红色,也就是说表格的第三、四、五行的第三列都是红色的。
大家帮忙哈!
这个应该容易把?我给出个思路:
把同一组每以行的整行连接成字符串,然后进行对比,如果值不相等,则说明有内容不一致。
如果内容不一致,那么取每一行的得第一个值为标准,让他和其他的进行比较,如果都相等,说明这一行都没有问题,继续上面的,直到找到有不相同那一列
是所有字段都比较还是只比较一个?
如果要比较除第一个之外的所有字段,也就是说,相同组的记录,其它字段都应相同的话:
首先 select distinct * into temp表 from 原表
得到结果为:
a 1 11 111
b 2 22 222
b 2 21 222
c 3 33 333
也就是说,凡有不同值的,都会出现两次或更多(如果有更多不同值)。
select 列1 into temp表2 from temp表
得到
a
b
b
c
用 select 列1 from temp表2 where count(列1)>1 group by 列1
可取出有重复的组,即得到B。(这个语句没实验,如果有问题,按这个意思改改就是了)
实际上,上面的语句只为分析方便,可以利用子查询合并一下,一条语句可能就出来了。
经过上面步骤,就知道哪些组需要标红了。
然后就是回过头来 select * from 原表,取出数据,然后:
如果是在JSP里,生成数据视图时判断一下,是否是属于上面得到的结果当中的组,如果是,加上
之类的HTML标记即可。
如果是在JAVA可视化应用程序里,就通过设置相应的数据视图控件的属性来标红。
ls的意思是要把所有不一致的组的所有的列都变红吧?我的要求是只把该组不一致的所有的列变红