去掉重复行
各位高手们,我在修改着一个SQL语句,是这样的
select K0101,D0302,D0321,D0322,K0102,K0103,K0104,
(select vDepot02 from vDepot where vDepot01=(left(K0105,
(select K0703 from K07 where K0701=K0101)) + left('0000000000000000000000',
(select K0704 from K07 where K0701=K0101)-len(left(K0105,
(select K0703 from K07 where K0701=K0101)))))) K0105,K0110,K0111,case when K0116='01' then
(select A0503 from A05 where A0502=K0115) else (select D2202 from D22 where D2201=K0115) end K0115,case
when K0116='01' then '生产' else '采购' end K0116 from K01 inner join D03 on D0301=K0101
where 1=1 order by K01.ID desc
现在数据库中有一些重复的数据(如K07中,或者还有其它的表中),结果就出了问题,现在想要把数据库中的一些重复数据除掉,我怎么也搞不好啊。我试着用distinct也没做对,有哪位能帮我看看,谢谢了!!!
问题点数:20、回复次数:12Top
1 楼winternet(冬天)回复于 2005-05-09 15:02:15 得分 0
搜索一下,很多例子!Top
2 楼xxljd(闪)回复于 2005-05-09 15:46:47 得分 5
http://tech.sina.com.cn/s/2004-10-22/1012444979.shtml
给你参考!呵呵Top
3 楼xxljd(闪)回复于 2005-05-09 15:49:09 得分 5
SQL Server中有一种更为简单的方法,它不需要用游标,只要写一句简单插入语句就能实现删除重复记录的功能。为了能清楚地表述,我们首先假设存在一个产品信息表Products,其表结构如下:
CREATE TABLE Products (
ProductID int,
ProductName nvarchar (40),
Unit char(2),
UnitPrice money
)
第一板斧——建立一张具有相同结构的临时表
CREATE TABLE Products_temp (
ProductID int,
ProductName nvarchar (40),
Unit char(2),
UnitPrice money
)
第二板斧——为该表加上索引,并使其忽略重复的值
方法是在企业管理器中找到上面建立的临时表Products _temp,单击鼠标右键,选择所有任务,选择管理索引,
第三板斧——拷贝产品信息到临时表
insert into Products_temp Select * from Products
第四板斧——将新的数据导入原表
将原产品信息表Products清空,并将临时表Products_temp中数据导入,最后删除临时表Products_temp。
delete Products
insert into Products select * from Products_temp
drop table Products_temp
这样就完成了对表中重复记录的删除。无论表有多大,它的执行速度都是相当快的,而且因为几乎不用写语句,所以它也是很安全的。
Top
4 楼cutelion(MADEinCNNC)回复于 2005-05-09 16:03:05 得分 0
高招啊!Top
5 楼qudymeteor(流星)回复于 2005-05-09 16:38:30 得分 5
select distinct AA.K0101,AA.D0302,AA.D0321,AA.D0322,AA.K0102,AA.K0103,AA.K0104,AA.K0105
AA.K0110,AA.K0111,AA.K0115
(
select K0101,D0302,D0321,D0322,K0102,K0103,K0104,
(select vDepot02 from vDepot where vDepot01=(left(K0105,
(select K0703 from K07 where K0701=K0101)) + left('0000000000000000000000',
(select K0704 from K07 where K0701=K0101)-len(left(K0105,
(select K0703 from K07 where K0701=K0101)))))) K0105,K0110,K0111,case when K0116='01' then (select A0503 from A05 where A0502=K0115) else (select D2202 from D22 where D2201=K0115) end K0115,case when K0116='01' then '生产' else '采购' end K0116
from K01 inner join D03 on D0301=K0101
where 1=1
)AA
--order by K01.ID descTop
6 楼TOMATOTO(蓝蓝)回复于 2005-05-09 16:40:32 得分 0
闪的方法不错,之前有很多帖子,找找吧Top
7 楼piaopiao2005()回复于 2005-05-09 18:51:38 得分 0
有没有在我的那条语句上进行修改的,我现在不可能再去建表啊,能不能有更直接的办法啊!!!Top
8 楼78hgdong(赤脚)回复于 2005-05-09 22:24:19 得分 0
老大,建临时表很久吗?Top
9 楼piaopiao2005()回复于 2005-05-09 22:44:03 得分 0
数据在不段的增加,表也在增加,现在表中少说有几十万条数据,如果有很多的表中都有重复行我启不是每个表都要建,你想这样维护容易吗?我想哪位能跟我说说用像视图之类的方法,我会很感激的.Top
10 楼piaopiao2005()回复于 2005-05-10 10:13:10 得分 0
难道就没有人可以帮我看看吗?分少可以加分的哦,我现在的报错是在查询的时候多了一个值。这个现在怎么解决啊?Top
11 楼xxljd(闪)回复于 2005-05-11 08:54:34 得分 0
建一个临时表而已啊 然后你把那些数据倒进去就可以了 复制啊 你仔细看啊 那个方法不错的
都是用复制的 只是建一个表格而已啊Top
12 楼laron(狂野之城)回复于 2005-05-12 17:16:43 得分 5
你可以等到表数据不在更新时,再运用 xxljd(闪) 的方法去做吧。干脆你就断开网络,先处理完再恢复网络吧。Top




