Filter results in select

select * from table

name1  4 o
name1  5 x
name1  3 x
name2  3 x
name3  2 x

I have above results in that name1 have values 3,4 and 5
I want to get the result as below where where the flag 'O' has been taken in case of multiple values for same name.here it is name1

name1  4 o
name2  3 x
name3  2 x

Please help!
LVL 8
PeteEngineerAsked:
Who is Participating?

Improve company productivity with a Business Account.Sign Up

x
 
CarlsbergFTWConnect With a Mentor Commented:
select * from table where upper(name1) like ('% o')

The data you provided is consisted in 1 or more tables ?

please post more details if this is not what you're looking for.
0
 
CarlsbergFTWConnect With a Mentor Commented:
select * from table where upper(name1) like upper('% o')
0
 
Pratima PharandeConnect With a Mentor Commented:
col1 change it to your name of name column and col3 is 'o' and 'x'

try this

select * from tablename
where col1 in (select col1 from tablename
Group by count(*)>1)
and col3 = 'o'
Union
select * from tablename
where col1 in (select col1 from tablename
Group by count(*)= 1)
0
The 14th Annual Expert Award Winners

The results are in! Meet the top members of our 2017 Expert Awards. Congratulations to all who qualified!

 
Guy Hengel [angelIII / a3]Connect With a Mentor Billing EngineerCommented:
this might do:
select t.*
  from (select name_field, number_field, flag_field
             , row_number() over (partition by name_field order by case when flag_field = 'o' then 0 else 1 end) rn
          from yourtable 
        ) t
where t.rn = 1

Open in new window

0
 
PeteEngineerAuthor Commented:
no only one table... name1 is a value not a coulmn name  and o is a value in another column
0
 
mkobrinConnect With a Mentor Commented:
please supplt the column names and then we can help you with the query
0
 
Olaf DoschkeConnect With a Mentor Software DeveloperCommented:
I think you're having three columns. But see how hard that is to tell, as CarlsbergFTW thinks of one column containing the whole lines?

If col1 contains name1,name2, etc and col2 containes the value 3,4,5 etc and col3 contains either 'x' or 'o', then it could be:

Select t1.* from table t1 where col3='o'
union
Select t1.* from table t1 where not exists (select 1 from table t2 where t1.col1=t2.col1 and t2.col3='o')

Open in new window


It smells like you need something more thoug, as your final result also has distinct values of col1 you might want to group by col1 and pick one record per group. While my solution should work (untested), it would fail, if you had more records for eg name2 with x but another int value, eg name2,2,'x' additionally to name2,3,'x' would also come into the final result.

You need to be more specific in what you want, then.

Bye, Olaf.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.