-1

I have a table as following:

enter image description here

Is there any SELECT query to show table in following form?

enter image description here

Thanks a lot.

Web Design
  • 77
  • 2
  • 19

2 Answers2

3

You can try following code :

SELECT post_id,
       (SELECT meta_value from test where meta_key='_total') AS _total,
       (SELECT meta_value from test where meta_key='_phone') AS _phone,
       (SELECT meta_value from test where meta_key='_address') AS _address 
FROM test
GROUP BY post_id

UPDATE Since the table is containing more post_id's, please check the following update.

SELECT post_id,
       (SELECT meta_value from test t2 where meta_key='_total' AND t1.post_id=t2.post_id) AS _total,
       (SELECT meta_value from test t2 where meta_key='_phone' AND t1.post_id=t2.post_id) AS _phone,
       (SELECT meta_value from test t2 where meta_key='_address' AND t1.post_id=t2.post_id) AS _address
FROM test t1
GROUP BY post_id
Mark
  • 422
  • 2
  • 10
2

I think accessing the same table four times is not needed.

You can use the conditional aggregation as follows:

SELECT post_id,
       max(case when meta_key='_total' then meta_value end) AS _total,
       max(case when meta_key='_phone' then meta_value end) AS _phone,
       max(case when meta_key='_address' then meta_value end) AS _address 
FROM test
GROUP BY post_id
Popeye
  • 35,427
  • 4
  • 10
  • 31