下面的sql语句怎么写才能得到我想要的结果

a619225471 2013-04-23 04:06:18
编号 状态
001 是
001 否
002 是
003 是
003 否
004 否

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


求支援
...全文
207 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
陈字文 2013-04-25
  • 打赏
  • 举报
回复
类似于删除重复数据,只不过条件设定的更多一些了
a619225471 2013-04-25
  • 打赏
  • 举报
回复
这个确实不好写,主要左边的是动态,没法用 select '001'....union select '002'........之类的因为编号是动态的生成多的 不是固定就这4个,其实的类似这样的,主要是前面2个属性,后面的属性是不同的,所以不会有重复的数据 属性1 属性2 属性3 属性4 1 是 1 否 2 是 3 否 4 是 4 否 5 是 5 是 6 否 6 否 . . . . 要得到的结果是 1 是 2 是 3 否 4 是 5 是 6 否 . . . . 结果是要同一个"属性1",但是有不同的"属性2"的“2”条数据,只留一条“是”的数据,如果是“属性2” 是相同的话就留一条,即group by就行了。 这题还真不好做 同时谢谢上面帮我解答了,分就给你们了
u010412956 2013-04-25
  • 打赏
  • 举报
回复
引用 9 楼 a619225471 的回复:
这个确实不好写,主要左边的是动态,没法用 select '001'....union select '002'........之类的因为编号是动态的生成多的 不是固定就这4个,其实的类似这样的,主要是前面2个属性,后面的属性是不同的,所以不会有重复的数据 属性1 属性2 属性3 属性4 1 是 ……
为什么不行? select seq, min(flag) keep(dense_rank last order by flag) from t group by seq; 这个语句得不出你要的结果??
sych888 2013-04-24
  • 打赏
  • 举报
回复
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,case when instr(wm_concat(flag),'是')>0 then '是' else '否' end from t group by seq;
alex_82712 2013-04-24
  • 打赏
  • 举报
回复
3F写的不错,也可以用KEEP(DENSE_RANK FIRST ORDER BY FLAG DESC)
rexsen 2013-04-24
  • 打赏
  • 举报
回复
其实编码重复,这个表结构就已经没有任何意义了,就当是联系SQL语句,才会有点作用。现实中,id貌似不是重复的。这种问题也就比较好解决。
rexsen 2013-04-24
  • 打赏
  • 举报
回复
十分简单;我的表名是 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) )
你好布布 2013-04-23
  • 打赏
  • 举报
回复
先按状态分组,取每组的唯一编号
u010412956 2013-04-23
  • 打赏
  • 举报
回复
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;
a619225471 2013-04-23
  • 打赏
  • 举报
回复
不是这个问题,主要是有2条重复编号,不同的状态只留一条为“是”数据,而去掉这个编号“否”的数据
xinpingf 2013-04-23
  • 打赏
  • 举报
回复
建议表里不要存汉字的“是”或“否”,而改用(1和0)存储,然后你就知道咋办了。。。

17,140

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧