我有一个表subject
,其中包含subject code
,user_id
和grade
列。我还有一张学生桌。
学生表:
| user_id | name |
+---------+------+
| 17000 | elle |
主题表:
| subjcode | user_id | grade |
+----------+---------+-------+
| os1 | 17000 | 90 |
| micro | 17000 | 90 |
什么是正确的查询,以便输出看起来像这样?
| user_id | os1 | micro1 |
+---------+-----+--------+
| 17000 | 90 | 90 |
答案 0 :(得分:1)
这要求您将来自多行的结果合并到一行中,这不容易被SQL查询处理。另外,您无法获得可变数量的字段作为结果(如果有5个主题,那该怎么办)。最好使用适当的语言在显示级别处理。
当然,存储过程会执行此操作,但这是另一个主题:-)
答案 1 :(得分:0)
根据SQL Query fields as columns之前的问题,你的代码看起来像这样:
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'MAX(case when subjcode = ''',
subjcode,
''' then grade end) AS ',
subjcode
)
) INTO @sql
FROM subject_table;
SET @sql = CONCAT('SELECT s.name, ', @sql, '
FROM student_table s
LEFT JOIN subject_table AS g
ON s.user_id = g.user_id
GROUP BY s.name');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;