'Can anyone help me to solve below sql question?
INPUT :-TABLENAME :- T1
ALGO|QTR|VOL
A Q1 1
A Q2 2
A Q3 3
B Q1 4
B Q2 5
B Q3 6
C Q1 7
C Q2 8
C Q3 9
OUTPUT:
ALGO Q1 Q2 Q3
A 1 2 3
B 4 5 6
C 7 8 9
enter image description here I tried pivot in sql but giving syntax error. Can any one help me for the same ?
Solution 1:[1]
You can do a manual/static pivot, as in:
select
algo,
max(case when qtr = 'Q1' then vol end) as q1,
max(case when qtr = 'Q2' then vol end) as q2,
max(case when qtr = 'Q3' then vol end) as q3
from t1
group by algo
If you need the pivot to be dynamic, then you can use two SQL selects: the first one can retrieve the possible column names; with it you can assemble a second query (using the same form as shown in this answer) that will produce columns dynamically.
Solution 2:[2]
I like The Imapaler's solution and it is likely better than mine.
Below an alternative that might be a lot more expensive, but also shows a different approach. It is not guaranteed that it will show a worse performance though. Database systems often manage to surprise me.
select a.algo, a.vol as Q1, b.vol as Q2, c.vol as Q3
from T a, T b, T c
where a.algo = b.algo
and b.algo = c.algo
and a.qtr = 'Q1'
and b.qtr = 'Q2'
and c.qtr = 'Q3';
Note: some people are absolutely in love with the join operator. It'll be easy to convert the above to use the join operator. The logic remains the same.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | The Impaler |
| Solution 2 | Ronald |
