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?
 
CarlsbergFTWCommented:
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
 
CarlsbergFTWCommented:
select * from table where upper(name1) like upper('% o')
0
 
Pratima PharandeCommented:
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
Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

 
Guy Hengel [angelIII / a3]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
 
mkobrinCommented:
please supplt the column names and then we can help you with the query
0
 
Olaf DoschkeSoftware 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.