简体   繁体   中英

How to get 2 values of same num to 2 separate columns

I got table like this:

num |type|value
--------------
1 | a   | 5
1 | b   | 7
3 | c   | 9
2 | a   | 6
2 | b   | 9

and want this kind of result:

num| value (a) | value (b)
-------------------------
1  |    5      |   7
2  |    6      |   9

You can use GROUP BY and CASE, as in:

select
  num,
  max(case when type = 'a' then value end) as value_a,
  max(case when type = 'b' then value end) as value_b
from t
group by num

I'd join the table on itself, once for a and once for b

SELECT a.num, a.value, b.value
FROM   mytable a
JOIN   mytable b ON a.num = b.num AND a.type = 'a' AND b.type = 'b'

You can use a self-join which will also remove the rows with just one value (num = 3 in your sample data)

select t1.num, t1.value as value_a, t2.value as value_b
from the_table t1 
  join the_table t2 on t1.num = t2.num and t2.type = 'b'
where t1.type = 'a'

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM