sql - oracle (row to column)

I have the data something like this.

col_1     col_2  
x           abc
x           def

y           123
y           456




I need the o/p like this:

col_1    col_2    col_3

x          abc       def

y         123        456

LVL 1
vishali_vishuAsked:
Who is Participating?
 
sdstuberConnect With a Mentor Commented:
anytime you have a query like this you don't understand, break it apart from the inside out...


SELECT col_1, col_2, ROW_NUMBER() OVER (PARTITION BY col_1 ORDER BY col_2) rn
            FROM your_table

this numbers each row by column 1,  so the first X is rn=1,  the second x is rn=2,  the first Y is rn=1, the second y is rn=2

then you select that data using decode to only keep the data for the "rn" you want for that column.


max and group by put it all together, remove that aggregation to see the raw results...

SELECT col_1, DECODE(rn, 1, col_2) col_2, DECODE(rn, 2, col_2) col_3
    FROM (SELECT col_1, col_2, ROW_NUMBER() OVER (PARTITION BY col_1 ORDER BY col_2) rn
            FROM your_table)

If you had more values for each x or y you could simply add more max and decodes...
 MAX(DECODE(rn, 3, col_2)) col_4, MAX(DECODE(rn, 4, col_2)) col_5, etc...
0
 
vishali_vishuAuthor Commented:

select x.col_1,x.col_2,y.col_2  from table x, table y
where x.col_1=y.col_1
and x.rowid <> y.rowid.

but i am getting o/p as:

col_1   col_2   col_3
x         abc      def
x         def      abc

y        123    456
y        456    123


0
 
sdstuberCommented:
try this...
ee.txt
0
 
sdstuberCommented:
sample script to test it...

 
CREATE TABLE your_table
AS
    SELECT 'x' col_1, 'abc' col_2 FROM DUAL
    UNION ALL
    SELECT 'x', 'def' FROM DUAL
    UNION ALL
    SELECT 'y', '123' FROM DUAL
    UNION ALL
    SELECT 'y', '456' FROM DUAL;
 
  SELECT col_1, MAX(DECODE(rn, 1, col_2)) col_2, MAX(DECODE(rn, 2, col_2)) col_3
    FROM (SELECT col_1, col_2, ROW_NUMBER() OVER (PARTITION BY col_1 ORDER BY col_2) rn
            FROM your_table)
GROUP BY col_1;
 
 
Table created.
 
C COL COL
- --- ---
x abc def
y 123 456
 
2 rows selected.

Open in new window

0
 
vishali_vishuAuthor Commented:
sdstuber:

It is working good.

can you explain me bit further....


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.