Office中国论坛/Access中国论坛

标题: 请教关于ACCESS中记录滤重的问题! [打印本页]

作者: golden88    时间: 2003-11-25 00:53
标题: 请教关于ACCESS中记录滤重的问题!
假如在一个表中有5个字段,我想实现如下过滤重复的效果:

如果某两条(或多条)记录的,字段1、字段2、字段3,中的数据完全相同则只保留一条记录。过滤掉其它记录。但过滤记录前得先判断这几条记录的字段4里有无数据。如果某条记录的字段4里有数据,则留下字段4里有数据的记录。过滤掉无数据的记录!
请问我该怎么做?在SQL查询里语句应该怎么写?哪位大虾帮我解答一下!谢谢!
作者: 没牙兔兔    时间: 2003-11-25 01:01
呵呵,总算做出来啦,不仔细考虑一下,前后做错了两次
不过笨了点,用了3个查询,期待高手交流

[字段4不为空的数据]:
SELECT DISTINCT 测试表.字段1, 测试表.字段2, 测试表.字段3, 测试表.字段4, 测试表.字段5
FROM 测试表
WHERE (((测试表.字段4) Is Not Null));

[字段4为空的数据]:
SELECT 测试表.*
FROM ((测试表 LEFT JOIN 字段4不为空的数据 ON 测试表.字段3 = 字段4不为空的数据.字段3) LEFT JOIN 字段4不为空的数据 AS 字段4不为空的数据_1 ON 测试表.字段1 = 字段4不为空的数据_1.字段1) LEFT JOIN 字段4不为空的数据 AS 字段4不为空的数据_2 ON 测试表.字段2 = 字段4不为空的数据_2.字段2
WHERE (((字段4不为空的数据.字段3) Is Null) AND ((字段4不为空的数据_1.字段4) Is Null) AND ((字段4不为空的数据_2.字段4) Is Null))

[联合查询]:
SELECT *  FROM 字段4不为空的数据
UNION select * from  字段4为空的数据;
[此贴子已经被作者于2003-11-24 17:50:16编辑过]


作者: 没牙兔兔    时间: 2003-11-25 01:59
这道题有点废脑筋,一不小心,兔兔就犯了两次错误
嘻嘻,好歹折腾出来啦
思路:
1 查出所有字段4 不为空 的唯一记录,这个好做,一个distinct 就搞定啦
2 然后在测试表中 排除 所有不匹配上面查询结构的记录,也就是找出所有字段4为空的 唯一记录
3 联合查询得出结果

嘻嘻,ADAM进来看看哦,读读你的实现思路

作者: golden88    时间: 2003-11-25 04:22
先谢谢了!
应该是可以实现,不过我没看太懂啊!我是个新手,有没有再简单点的办法啊?
作者: golden88    时间: 2003-11-25 04:39
没牙兔兔
SELECT DISTINCT 测试表.字段1, 测试表.字段2, 测试表.字段3, 测试表.字段4, 测试表.字段5
这是对所有字段相同的滤重呀,并不是对1、2、3字段滤重。我的第五字段肯定是不重的。
作者: 没牙兔兔    时间: 2003-11-25 04:55
这样的话,那么第一个查询还要改复杂一点,嘻嘻
兔兔笨啊,只会这样把结果挤出来
先建立一个查询:
select distinct 字段1,字段2,字段3 from 测试表
然后再用left join 把相关字段4不为空的关联上

做你的查询有个问题
会不会有字段1,2,3相同,字段4为空,字段5不同的记录???这种倒底要不要舍弃?
作者: ADAM    时间: 2003-11-25 15:39
這個題意有點模糊:
是不是這樣:

1.先在字段4中篩選出有記錄的數據.
2.在這個基礎上,篩選出字段1,2,3的唯一字段,(這個有點問題,你說字段5絕對不重,那篩選1,2,3就沒意義了啊,除非你不想顯示字段5,只顯示字段1,2,3,4,對吧.)
3.如果是這樣了話...
那就用兔兔的第一個查詢就夠了啊....
[字段4不为空的数据]:

SELECT DISTINCT 测试表.字段1, 测试表.字段2, 测试表.字段3, 测试表.字段4
FROM 测试表
WHERE (((测试表.字段4) Is Not Null));

4.這個題,主要是講述得不夠明白....,不知我這樣說,有沒理解你們的意思....
5.最好是能夠用例子的方式,原表是怎樣的,操作后又變更什么樣子,這樣即管復雜點,大家也能明白的.




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3