can any one help me on how can I create a query output using the row data on the source table as a header on my output. Please see below for illustration.
E.G.
Row Data:
+-----------+----------+
| colHeader | value |
+-----------+----------+
| Header1 | value 1 |
+-----------+----------+
| Header2 | value 2 |
+-----------+----------+
| Header3 | value 3 |
+-----------+----------+
Output:
+-----------+-----------+-----------+
| Header1 | header2 | Header3 |
+-----------+-----------+-----------+
| Value 1 | value 2 | Value 3 |
+-----------+-----------+-----------+
Is it possible??
Here is my MySQL script. I don't think if is it the right way. Is there any idea on how could i arrive on the above output?
SELECT t1.value AS `Header1`,
t2.value AS `Header2`,
t3.value AS `Header3`
FROM (SELECT * FROM table1 WHERE colHeader='Header1') t1
JOIN (SELECT * FROM table1 WHERE colHeader='Header2'3) t2
JOIN (SELECT * FROM table1 WHERE colHeader='Header3') t3;
Unfortunately, MySQL does not have PIVOT function, so in order to rotate data from rows into columns you will have to use a CASE expression along with an aggregate function.
SET @sql = CONCAT('SELECT Meeting_id, ', @sql, ' FROM Meeting WHERE <condition> GROUP BY Meeting_id'); Similarly, you can also apply JOINS in your SQL query while you transpose rows to columns dynamically in MySQL. Here's an example of pivot table created using Ubiq.
How about this??
SELECT
GROUP_CONCAT(if(colHeader = 'Header 1', value, NULL)) AS 'Header 1',
GROUP_CONCAT(if(colHeader = 'Header 2', value, NULL)) AS 'Header 2',
GROUP_CONCAT(if(colHeader = 'Header 3', value, NULL)) AS 'Header 3'
FROM myTable;
Note, you will need GROUP BY
statement when there are more data of ids as shown below in Demo 2.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With