站内搜索: 请输入搜索关键词

当前页面: 开发资料首页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的意思是要把所有不一致的组的所有的列都变红吧?我的要求是只把该组不一致的所有的列变红


↑返回目录
前一篇: 我的数据为什么写不到指定的文件里
后一篇: 关于用Java写数据进数据库