none
去除重复项 RRS feed

  • 问题

  • create table device
    (
     D_ID int IDENTITY(1,1) NOT NULL,
     D_Temp2 nvarchar(50), 
    }
    insert into device values('1') 
    insert into device values('11') 
    insert into device values('12') 
    insert into device values('13') 
    insert into device values('22') 
    insert into device values('15') 
    insert into device values('17') 
    insert into device values('15') 
    declare @cols1 Nvarchar(2000)
    set @cols1=''
    select @cols=@cols+N',max((case when D_ID=N'''+CAST(D_ID AS NVARCHAR(10))+N''' then D_Temp2 else null end )) as ['+CAST(D_ID AS NVARCHAR(10))+'] ' 
    from (SELECT D_ID FROM device ) AS T
    exec(N'select N''[型号]'' '+@cols1+N' from device)
    
    2010年10月11日 2:48

答案

  • -- 显示重复数据
    select
    	*
    from device a
    where exists(
    	select * from device b
    	where a.D_Temp2 = b.D_Temp2
    		and a.D_ID <> b.D_ID
    );
    
    -- 删除重, 复数据保留 D_ID 最小的那条
    delete a
     from device a
    where exists(
    	select * from device b
    	where a.D_Temp2 = b.D_Temp2
    		and a.D_ID > b.D_ID
    );
    
    2010年10月11日 4:07

全部回复

  • What's this?
    2010年10月11日 3:01
  • 我想查出要去除重复项的数据。可以实现吗?
    2010年10月11日 3:05
  • -- 显示重复数据
    select
    	*
    from device a
    where exists(
    	select * from device b
    	where a.D_Temp2 = b.D_Temp2
    		and a.D_ID <> b.D_ID
    );
    
    -- 删除重, 复数据保留 D_ID 最小的那条
    delete a
     from device a
    where exists(
    	select * from device b
    	where a.D_Temp2 = b.D_Temp2
    		and a.D_ID > b.D_ID
    );
    
    2010年10月11日 4:07
  • 谢谢,  还有个问题, 这个表里的数据,我都是列转行。每列都有可能有重复的数据。我要去除每列重复的数据。这条件可以实现吗
    where exists(
    	select * from device b
    	where a.D_Temp2 = b.D_Temp2
    		and a.D_ID > b.D_ID
    );
    2010年10月11日 4:10
  • 可以, 不过对于你前面给的那个行转列的语句, 你可以直接把

    from (SELECT D_ID FROM device ) AS T

    改成下面这个, 看起来简单一点

    from (SELECT D_ID=MIN(D_ID) FROM device GROUP BY D_Temp2) AS T

    2010年10月11日 4:46
  • from (SELECT D_ID=MIN(D_ID) FROM device GROUP BY D_Temp2) AS T

    这个只是D_Temp2列去除了重复。

    但是还有D_Temp3,D_Temp4...呢。  不会不可以实现吧

    2010年10月11日 5:42
  • 对于 D+temp3 ..... 这种情况, 举例说明你要如何支重复

    最后是直接以你的最终实际需求来描述问题

    2010年10月12日 4:41