0

我有以下数据集(请注意,我的数据库/架构有些复杂,因此在此处包含所有详细信息是不可行的)

这是我从基表中提取的数据的简化版本,并创建了一个view.

锻炼活动记录 ID 属性度量 ID 属性度量值锻炼锻炼设置创建
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
.
.
. (等等进一步的锻炼活动记录ID)

我需要计算(查看数据以更好地理解)

总计 = (10 * 30) + (20 * 12.9) + (20 * 40)
按月分组。

这里有助于乘法的基本方法是将行转置为列。所以上面的结构会变成——

锻炼_活动_记录_id ex17 ex18锻炼_锻炼_设置_创建_on     
234 10 30 2012-02-06 00:00:00
234 20 12.9 2012-03-03 00:00:00
234 20 40 2012-04-02 00:00:00
.
.
.
.
. (对于剩余的锻炼活动记录 ID 依此类推)

为此,我浏览了几篇 SO 帖子,在尝试了各种可行/不可行 (:D) 选项后,我提出了以下查询。

选择
       案例属性_metric_id
           WHEN '17' THEN attribute_metric_value END AS 'ex17',
       CASE attribute_metric_id WHEN '18' THEN attribute_metric_value END AS 'ex18',
       锻炼_锻炼_设置_创建_on
FROM 练习属性
在哪里锻炼_活动_记录_id = 234

我得到的实际输出是

锻炼_活动_记录_id ex17 ex18锻炼_锻炼_设置_创建_on
234 10 空 2012-02-06 00:00:00
234 NULL 30 2012-02-06 00:00:00
234 20 空 2012-03-03 00:00:00
234 NULL 12.9 2012-03-03 00:00:00
234 20 空 2012-04-06 00:00:00
234 NULL 40 2012-04-02 00:00:00

任何人都可以对此有所了解吗?我将不胜感激。谢谢!

4

2 回答 2

3

这会为您计算总计,按年份和月份分组:

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)

SQL 小提琴示例

输出

YEAR    MONTH   GRANDTOTAL
2012    2        300
2012    3        258
2012    4        800
于 2012-06-26T15:13:19.447 回答
1

只需添加聚合函数:

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您应该修改 group by workout_activity_record_id,workout_exercise_set_created_on

于 2012-06-26T15:06:06.243 回答