![](/img/trans.png)
[英]To retrieve values from multiple rows into a single row from a single table under multiple columns
[英]How to transform all the values in a SQL table into a single row with multiple columns
我需要创建下表的视图
学生 | 分数 |
---|---|
詹姆士 | 500 |
杰克 | 200 |
吉米 | 100 |
变成这样
学生_1 | 标记_1 | 学生_2 | 标记_2 | 学生_3 | Marks_3 |
---|---|---|---|---|---|
詹姆士 | 500 | 杰克 | 200 | 吉米 | 100 |
我是 SQL 的新手,我正在集思广益如何做到这一点,但我无法弄清楚。 任何帮助将不胜感激,谢谢。
这是您案例的示例。 您可以使用PREPARE语句
SELECT CONCAT( "SELECT ",
GROUP_CONCAT(
CONCAT('"',Student,'"'),CONCAT(' AS "Student_',@Nr:=@Nr+1,'", ')
,CONCAT('"',Marks,'"'),CONCAT(' AS "Marks_',@Nr,'" ') SEPARATOR ' , ')
," FROM DUAL;") INTO @myquery
FROM stud
CROSS JOIN (SELECT @Nr:=0) as Init
ORDER BY Marks DESC;
## ONLY FOR DEBUG
SELECT @myquery;
PREPARE stmt FROM @myquery;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
样本
MariaDB [Bernd]> SELECT * from stud;
+----+---------+-------+
| id | Student | Marks |
+----+---------+-------+
| 1 | James | 500 |
| 2 | Jack | 200 |
| 3 | Jimmy | 100 |
+----+---------+-------+
3 rows in set (0.01 sec)
MariaDB [Bernd]> SELECT CONCAT( "SELECT ",
-> GROUP_CONCAT(
-> CONCAT('"',Student,'"'),CONCAT(' AS "Student_',@Nr:=@Nr+1,'", ')
-> ,CONCAT('"',Marks,'"'),CONCAT(' AS "Marks_',@Nr,'" ') SEPARATOR ' , ')
-> ," FROM DUAL;") INTO @myquery
-> FROM stud
-> CROSS JOIN (SELECT @Nr:=0) as Init
-> ORDER BY Marks DESC;
Query OK, 1 row affected (0.00 sec)
MariaDB [Bernd]> ## ONLY FOR DEBUG
MariaDB [Bernd]> SELECT @myquery;
+----------------------------------------------------------------------------------------------------------------------------------------------------------+
| @myquery |
+----------------------------------------------------------------------------------------------------------------------------------------------------------+
| SELECT "James" AS "Student_1", "500" AS "Marks_1" , "Jack" AS "Student_2", "200" AS "Marks_2" , "Jimmy" AS "Student_3", "100" AS "Marks_3" FROM DUAL; |
+----------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
MariaDB [Bernd]> PREPARE stmt FROM @myquery;
Query OK, 0 rows affected (0.00 sec)
Statement prepared
MariaDB [Bernd]> EXECUTE stmt;
+-----------+---------+-----------+---------+-----------+---------+
| Student_1 | Marks_1 | Student_2 | Marks_2 | Student_3 | Marks_3 |
+-----------+---------+-----------+---------+-----------+---------+
| James | 500 | Jack | 200 | Jimmy | 100 |
+-----------+---------+-----------+---------+-----------+---------+
1 row in set (0.00 sec)
MariaDB [Bernd]> DEALLOCATE PREPARE stmt;
Query OK, 0 rows affected (0.00 sec)
MariaDB [Bernd]>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.