[英]Transposing rows into columns - An Issue faced.
我有以下數據集(請注意,我的數據庫/方案有些復雜,因此在此處包括所有詳細信息是不可行的)
這是我從基本表中提取並創建view
數據的簡化版本。
workout_activity_record_id attribute_metric_id attribute_metric_value workout_exercise_set_created_on 234 17 10 2012-02-06 00:00:00 234 18 30 2012-02-06 00:00:00 234 17 20 2012-03-03 00:00:00 234 18 12.9 2012-03-03 00:00:00 234 17 20 2012-04-02 00:00:00 234 18 40 2012-04-02 00:00:00 . . . (So on for further workout_activity_record_ids)
我需要計算(在數據中查找以更好地理解)
Grand Total = (10 * 30) + (20 * 12.9) + (20 * 40)按月分組。
一種有助於乘法的基本方法是將行轉置為列。 因此上述結構將變為-
SELECT CASE attribute_metric_id WHEN '17' THEN attribute_metric_value END AS 'ex17', CASE attribute_metric_id WHEN '18' THEN attribute_metric_value END AS 'ex18', workout_exercise_set_created_on FROM exercise_attribute WHERE workout_activity_record_id =234
為此,我經歷了幾篇SO文章,並嘗試了各種可行/不可行(:D)選項之后,提出了以下查詢。
workout_activity_record_id ex17 ex18 workout_exercise_set_created_on 234 10 NULL 2012-02-06 00:00:00 234 NULL 30 2012-02-06 00:00:00 234 20 NULL 2012-03-03 00:00:00 234 NULL 12.9 2012-03-03 00:00:00 234 20 NULL 2012-04-06 00:00:00 234 NULL 40 2012-04-02 00:00:00
我得到的實際輸出是
\n execution_activity_record_id ex17 ex18 Exercise_exercise_set_created_on \n 234 10空2012-02-06 00:00:00\n 234空30 2012-02-06 00:00:00\n 234 20空2012-03-03 00:00:00\n 234空12.9 2012-03-03 00:00:00\n 234 20空2012-04-06 00:00:00\n 234空40 2012-04-02 00:00:00\n
任何人都可以對此有所了解嗎? 我將不勝感激。 謝謝!
這將為您計算總計,按年份和月份分組:
SELECT YEAR(workout_exercise_set_created_on) AS YEAR,
MONTH(workout_exercise_set_created_on) AS MONTH,
sum(SubTotal) AS GrandTotal
FROM
(SELECT workout_exercise_set_created_on,
max(CASE WHEN attribute_metric_id = 17 THEN attribute_metric_value END) * max(CASE WHEN attribute_metric_id = 18 THEN attribute_metric_value END) AS SubTotal
FROM MyTable
GROUP BY workout_exercise_set_created_on) a
GROUP BY YEAR(workout_exercise_set_created_on),
MONTH(workout_exercise_set_created_on)
產量
YEAR MONTH GRANDTOTAL
2012 2 300
2012 3 258
2012 4 800
只需添加聚合函數:
SELECT
MAX(CASE attribute_metric_id
WHEN '17' THEN attribute_metric_value
END) AS 'ex17',
MAX(CASE attribute_metric_id
WHEN '18' THEN attribute_metric_value
END) AS 'ex18',
workout_exercise_set_created_on
FROM exercise_attribute
WHERE workout_activity_record_id =234
GROUP BY workout_exercise_set_created_on
如果您需要顯示不同的workout_activity_record_id
結果, workout_activity_record_id
應按group by workout_activity_record_id,workout_exercise_set_created_on
修改group by workout_activity_record_id,workout_exercise_set_created_on
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.