我有一个名为mdl_grade_grades的表,其中包含列id,userid,itemid,rawgrademax,finalgrade 我还有另一个表ID为itemname的表mdl_grade_items,其中mdl_grade_grades中的itemid = mdl_grade_items中的id
我正在使用MySQL数据库,在不同情况下项目数会有所不同。
最近3天,我进行了很多研究,但我的MySQL技能并未丰富到理解和修改可用的相关解决方案。我仍然尝试修改以下线程中提供的查询: MySQL dynamic pivot table MySQL Table pivot - Dynamic
但是,我在“ PREPARE stmt FROM @sql;”附近收到错误消息
我尝试过:
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'max(case when itemid = ''',
itemid,
''' then finalgrade end) AS `',
itemid, '`'
)
) INTO @sql
FROM mdl_grade_grades;
SET @sql = CONCAT('SELECT userid, ', @sql, '
FROM mdl_grade_grades
GROUP BY userid');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
我想要如下所示的输出 Desired Output
因此,无论用户有记录何处,项目名称都将成为标题,并且其值将等于(finalgrade / rawgrademax)* 100。如果用户没有该项目的记录,则该项目的值将保持空白。
答案 0 :(得分:0)
您的错误可以从代码中删除,您可以明智地理解
SET @sql = NULL;
SELECT GROUP_CONCAT(DISTINCT CONCAT( ' MAX(CASE ',
itemid,
' WHEN ''',
'' ,
''' THEN ',
finalgrade,
' END) ''',
itemid,
'''') )
INTO @sql
FROM mdl_grade_grades;
SET @sql = CONCAT('SELECT userid, ', @sql, '
FROM mdl_grade_grades
GROUP BY userid');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;