表格式如下:ID   S_ID      COURSE_NAME STATE
1    1900560013 课程A        0
2    1900560013 课程A        1
3    1900930116 课程A        0
4    1900930116 课程A        1
5    1900930116 课程B        1
6    1900930116 课程C        0
7    1900930116 课程B        0
8    1900930116 课程C        1
现在 S_ID,COURSE_NAME 两个字段有重复,需要删除重复,但是两条重复的数据需检查STATE,需要删除的是STATE=1的,如果两天重复的数据STATE都等于1,则任意删除一条。 

解决方案 »

  1.   

    懒得动脑了,sql 确实可以比较方便地实现
      

  2.   

    delete from a where id in(select max(id) as id
    from a
    where state=1
    group by s_id)
    看下
      

  3.   

    楼上的  我觉得你没看清楚楼主的条件
    现在 S_ID,COURSE_NAME 两个字段有重复,需要删除重复,但是两条重复的数据需检查STATE,需要删除的是STATE=1的,如果两天重复的数据STATE都等于1,则任意删除一条。你这里分组的条件 貌似少啦个 coursename  
      

  4.   

    select max(ID), S_ID ,COURSE_NAME ,max(STATE) from table group by S_ID ,COURSE_NAME
      

  5.   


    create table #t
    (
    ID INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
    S_ID VARCHAR(50) NOT NULL,
    COURSE_NAME VARCHAR(20) NOT NULL,
    STATE BIT NOT NULL
    )
    insert into #t
    values
    ('1900560013','A',0),
    ('1900560013','A',1),
    ('1900930116','A',1),
    ('1900930116','A',1),
    ('1900930116','A',1),
    ('1900930116','B',1),
    ('1900930116','C',0),
    ('1900930116','B',0),
    ('1900930116','C',1)--先删除S_ID,COURSE_NAME,[STATE] 完全一样的数据,只剩下一条
    --上面的insert语句中3,4,5 S_ID,COURSE_NAME,[STATE]都一样,所以就剩下了3
    delete from #t
    where ID not in 
    (
    select min(id)
    from #t
    group by S_ID,COURSE_NAME,[STATE]
    )select * from #t--这个地方就按照你的要求删除S_ID,COURSE_NAME一样,但[STATE]=1的数据
    delete from #t
    where ID in 
    (
    select t.ID from #t t
    inner join 
    (
    select S_ID,COURSE_NAME from #t
    group by S_ID,COURSE_NAME
    having COUNT(*)>1
    ) as tt on t.s_id=tt.s_id and t.course_name=tt.course_name
    where t.state=1
    )select * from #tdrop table #t