日期:2014-05-17  浏览次数:20787 次

下面的sql语句怎么写才能得到我想要的结果
编号     状态
001     是
001     否
002     是
003     是
003     否
004     否

想要的结果
编号     状态
001     是
002     是
003     是
004     否


求支援
求高人支援

------解决方案--------------------
建议表里不要存汉字的“是”或“否”,而改用(1和0)存储,然后你就知道咋办了。。。
------解决方案--------------------
with t as
 (select '001' seq, '是' flag
    from dual
  union all
  select '001', '否'
    from dual
  union all
  select '002', '是'
    from dual
  union all
  select '002', '否'
    from dual
  union all
  select '003', '是'
    from dual
  union all
  select '003', '否'
    from dual
  union all
  select '004', '否' from dual)
select seq, min(flag) keep(dense_rank last order by flag)
  from t
 group by seq;

------解决方案--------------------
先按状态分组,取每组的唯一编号
------解决方案--------------------
十分简单;我的表名是   rexsen   字段情况:  

语句:

select * from
(select * from rexsen where id in (select id from ( select id,count(id) s from rexsen group by id) where s=2) and name <> '否')union
(select * from rexsen where id not in (select id from ( select id,count(id) s from rexsen group by id) where s=2) )

------解决方案--------------------
其实编码重复,这个表结构就已经没有任何意义了,就当是联系SQL语句,才会有点作用。现实中,id貌似不是重复的。这种问题也就比较好解决。
------解决方案--------------------
3F写的不错,也可以用KEEP(DENSE_RANK FIRST ORDER BY FLAG DESC)
------解决方案--------------------
with t as
 (select '001' seq, '是' flag
    from dual
  union all
  select '001', '否'
    from dual
  union all
  select '002', '是'
    from dual
  union all
  select '002', '否'
    from dual
  union all
  select '003', '是'
    from dual
  union all
  select '003', '否'
    from dual
  union all
  select '004', '否' from dual)