簡體   English   中英

將列轉換為mysql中的三個新列

[英]Transposing a column into three new columns in mysql

我在mysql中有一個帶有以下各列的表:

在此處輸入圖片說明

數據示例:

'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'

我想轉置時間列,以便在晚上,下午和早晨有三個新列,並記錄數量,以使列看起來像
id, cow_id, Evening, Afternoon, Morning, date_added, date,quantity_type

有人可以給我一個解決方案,如何使用mysql查詢嗎?

嘗試這個:

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

它通過僅在time與特定值匹配時包括quantity ,然后對列名進行別名以使輸出更美觀來工作。

如果您希望將給定日期的所有母牛的飼料都排成一行,則可以嘗試如下操作:

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

對於您的示例數據,這將給出如下結果(請注意,我必須在“合並”時間添加另一列):

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  

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM