[Last Call] Learn how to a build a cloud-first strategyRegister Now

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 562
  • Last Modified:

query to produce 10 rows, half of col= A and other half of col=B

I have a table my_table
I want a query which selects 5 rows where col='A' and 5 rows where col='B'
so i should have a total of 10 rows.

but the following query does not work as intended.

select col
from my_table
where col= 'A'
and rownum<=5
union
select col
from my_table
where col= 'B'
and rownum<=5

0
gram77
Asked:
gram77
  • 4
  • 4
  • 3
1 Solution
 
data_n_pokerCommented:
Try using union all instead of just union
0
 
gram77Author Commented:
union all and union work same.
also i only see col=A rows, col=B rows do not append
0
 
data_n_pokerCommented:
Try this:

Select *
From 
(select col
from my_table
where col= 'A'
and rownum<=5) colA,
(select col
from my_table
where col= 'B'
and rownum<=5) colB
ORDER BY Col

Open in new window

0
Microsoft Certification Exam 74-409

VeeamĀ® is happy to provide the Microsoft community with a study guide prepared by MVP and MCT, Orin Thomas. This guide will take you through each of the exam objectives, helping you to prepare for and pass the examination.

 
sdstuberCommented:
you can also try this



SELECT col
  FROM (SELECT col, ROW_NUMBER() OVER (PARTITION BY col ORDER BY 1) rn
          FROM my_table
         WHERE col IN ('A', 'B'))
 WHERE rn <= 5
0
 
gram77Author Commented:
above query returns no rows.
0
 
sdstuberCommented:
are you sure you're explaining your setup correctly?

the union all suggestion and my row_number suggestion both work when I tested them.

if they don't work for you, please post structure and sample data that illustrates the problem
0
 
data_n_pokerCommented:
I have create a table in a oracle 11 database.  The table has one column, with A and B entries, using this query:
select col
from my_table
where col= 'A'
and rownum <=5
union all
select col
from my_table
where col='B'
and rownum <=5

Open in new window

I got these results
Col
A
A
A
A
A
B
B
B
B
B

Open in new window

0
 
sdstuberCommented:
gram77,

please explain your choice.
the accepted answer does not produce the requested results of 10 rows.

It will produce a cartesian product based on the results of two subqueries.
Assuming each subquery returns 5 rows, the result will be 25 rows for the entire query
Also, it won't return a single column it will return 2 columns
and lastly,  the order by clause in that post is syntactically incorrect because "col" is ambiguous
0
 
data_n_pokerCommented:
I have the same question, as i posted that before i tried it, and it is very much incorrect(syntactically and based on what is asked for in the question).  Thought the union all and sdstuber's query provided the exact results that were requested.
0
 
gram77Author Commented:
that is an error on my part.
by mistake i accepted the wrong solution,
the correct one is
ID: 35208415
0
 
sdstuberCommented:
sure,  UNION ALL was the very first post and from the same author
http:#a35208415 repeats it but with an example.
0

Featured Post

Restore individual SQL databases with ease

Veeam Explorer for Microsoft SQL Server delivers an easy-to-use, wizard-driven interface for restoring your databases from a backup. No expert SQL background required. Web interface provides a complete view of all available SQL databases to simplify the recovery of lost database

  • 4
  • 4
  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now