select * from table_name where (id,state) in(
select id,decode(count(state),1,1,3) vi_count from table_name group by id)
你没说出如果ID=B但是没有状态为1或者是ID=A但是状态没有为3的情况吧