日期:2014-05-18  浏览次数:20903 次

SQL问题:如何过滤重复记录
有一个表的结构是这样的
  id bookname cbs zz
  001 asp大全 清华大学出版社 田正平
  002 数据库系统教程 高等教育出版社 周奥英
  003 asp大全 清华大学出版社 田正平

现在我想做一个查询,要查找出的字段如下
  bookname, cbs, zz

按bookname字段过滤记录,但要显示多个字段
查询的结果应为
  bookname cbs zz
  asp大全 清华大学出版社 田正平
  数据库系统教程 高等教育出版社 周奥英

如何过滤重复的记录
谢谢!

**********************************************************
SELECT DISTINCT bookname, cbs, zz FROM TABLE(此方法行不通)
**********************************************************



------解决方案--------------------
DISTINCT 只对一个字段的
------解决方案--------------------
create table #dd 

[id] varchar(3),
bookname varchar(100),
cbs varchar(100),
zz varchar(100)
)

insert #dd 
select '001','asp大全','清华大学出版社','田正平'
union
select '002','数据库系统教程','高等教育出版社','周奥英'
union
select '003',' asp大全','清华大学出版社','田正平'

select * from #dd

SELECT DISTINCT ltrim(rtrim(bookname)) bookname, ltrim(rtrim(cbs)) cbs, ltrim(rtrim(zz))zz FROM #dd

drop table #dd
------解决方案--------------------
LZ,昨天的问题还没解决?
SQL code
SELECT DISTINCT bookname, cbs, zz FROM TABLE(此方法行不通)

------解决方案--------------------
DISTINCT 只对一个字段的 的说明是不正确的

问题也许是在于题目录入时空格的存在!

如果不使用ltrim(rtrim(x))的话,是不能得到预期结果的,原因是001和003的区别在于在asp前,003多了一个空格

------解决方案--------------------
SELECT DISTINCT bookname, cbs, zz FROM TABLE(此方法行不通)
???
应该可以吧
试着去掉空格LTrim(RTrim())
SELECT DISTINCT LTrim(RTrim(bookname)), LTrim(RTrim(cbs)), LTrim(RTrim(zz)) FROM TABLE
------解决方案--------------------
肯定是有空格存在

------解决方案--------------------
Select bookname,cbs,zz From tablename A Where bookname In(Select Top 1 bookname From tablename B Where A.id=B.id Order By bookname ) 


------解决方案--------------------
用distinct可以啊。不行的話可能是兩個字串不一樣,看錄入時是不是有空格
------解决方案--------------------
把要搜索的数据的主键distinct一下应该就可以