I have a table in mysql with the following columns:
Example of data:
'16', '1', 'Evening', '6.00', '2014-06-05 08:14:35', '2014-06-04', '6.00'
'17', '2', 'Afternoon', '8.00', '2014-06-05 08:15:29', '2014-06-04', '8.00'
'18', '3', 'Afternoon', '4.00', '2014-06-05 08:17:32', '2014-06-04', '4.00'
'19', '4', 'Afternoon', '4.00', '2014-06-05 08:18:25', '2014-06-04', '4.00'
'20', '17', 'Morning', '2.00', '2014-06-05 09:11:40', '2014-06-05', '2.00'
'21', '17', 'Morning', '3.00', '2014-06-05 09:16:36', '2014-06-04', '3.00'
'22', '17', 'Evening', '2.00', '2014-06-05 09:17:43', '2014-06-04', '2.00'
'23', '19', 'Morning', '1.00', '2014-06-05 10:12:47', '2014-06-05', '1.00'
'24', '20', 'Morning', '2.00', '2014-06-05 10:16:02', '2014-06-05', '2.00'
'25', '22', 'Morning', '2.00', '2014-06-05 10:27:34', '2014-06-05', '2.00'
'26', '23', 'Morning', '2.00', '2014-06-05 10:28:08', '2014-06-05', '2.00'
'27', '24', 'Morning', '1.00', '2014-06-05 10:30:20', '2014-06-05', '1.00'
'28', '27', 'Morning', '1.00', '2014-06-05 10:43:12', '2014-06-05', '1.00'
'29', '27', 'Combined', '2.00', '2014-06-05 10:45:45', '2014-06-04', '2.00'
'31', '28', 'Morning', '3.00', '2014-06-05 11:04:32', '2014-06-05', '3.00'
I would like to transpose the time column so that I have three new columns evening, afternoon and morning and record the quantity so that columns look like
id, cow_id, Evening, Afternoon, Morning, date_added, date,quantity_type
Could someone give me a solution on how to go about this with mysql query?
Try this:
SELECT id, cow_id,
IF(time = 'Morning',quantity,0) AS Morning,
IF(time = 'Afternoon',quantity,0) AS Afternoon,
IF(time = 'Evening',quantity,0) AS Evening,
date_added, quantity_type
FROM OriginalTable
It works by only including the quantity
if the time
matches the particular value and then aliases the column name to make the output prettier.
If you want to have all a cow's feeds for a given date on one line, you could try something like this:
SELECT cow_id,
SUM(CASE time WHEN 'Evening' THEN quantity ELSE 0 END) AS Evening,
SUM(CASE time WHEN 'Afternoon' THEN quantity ELSE 0 END) AS Afternoon,
SUM(CASE time WHEN 'Morning' THEN quantity ELSE 0 END) AS Morning,
SUM(CASE time WHEN 'Combined' THEN quantity ELSE 0 END) AS Combined,
`date`
FROM cows
GROUP BY cow_id, date
For your sample data, this would give a result like this (note I had to add another column for the 'Combined' time):
cow_id Evening Afternoon Morning Combined date
1 6 0 0 0 2014-06-04
2 0 8 0 0 2014-06-04
3 0 4 0 0 2014-06-04
4 0 4 0 0 2014-06-04
17 2 0 3 0 2014-06-04
17 0 0 2 0 2014-06-05
19 0 0 1 0 2014-06-05
20 0 0 2 0 2014-06-05
22 0 0 2 0 2014-06-05
23 0 0 2 0 2014-06-05
27 0 0 0 2 2014-06-04
27 0 0 1 0 2014-06-05
28 0 0 3 0 2014-06-05
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.