SQL查询将列转换为行

标签 sql

我的表格有以下列:

roll no | subject1 | subject2 | subject3 | subject4 | subject5 | subject6
   1    |    10    |    12    |    13    |    9     |    15    |    16
   2    |    12    |    14    |    10    |    16    |    19    |    13
   3    |    10    |    12    |    13    |    18    |    12    |    15
   4    |    14    |    12    |    13    |    7     |    11    |    17

现在我需要这种格式的数据:

Roll no | SubjectName | Marks
    1   |  subject1   |  10     
    1   |  subject2   |  12     
    1   |  subject3   |  13     
    1   |  subject4   |  9     
    1   |  subject5   |  15     
    1   |  subject6   |  16     
    2   |  subject1   |  12     
    2   |  subject2   |  14     
    2   |  subject3   |  10     
    2   |  subject4   |  16     
    2   |  subject5   |  19     
    2   |  subject6   |  13   
    3   |  subject1   |  10     
    3   |  subject2   |  12     
    3   |  subject3   |  13     
    3   |  subject4   |  18     
    3   |  subject5   |  12     
    3   |  subject6   |  15  
    4   |  subject1   |  14     
    4   |  subject2   |  12     
    4   |  subject3   |  13     
    4   |  subject4   |  7     
    4   |  subject5   |  11     
    4   |  subject6   |  17   

如您所见,我想将列显示为行

谢谢

最佳答案

如果您的数据库支持UNPIVOT ,你可以使用它。

如果没有,您可以使用UNION ALL:

SELECT roll_no, 'subject1' AS SubjectName, subject1 AS Marks FROM yourtable
UNION ALL
SELECT roll_no, 'subject2', subject2 FROM yourtable
UNION ALL
SELECT roll_no, 'subject3', subject3 FROM yourtable
UNION ALL
SELECT roll_no, 'subject4', subject4 FROM yourtable
UNION ALL
SELECT roll_no, 'subject5', subject5 FROM yourtable
UNION ALL
SELECT roll_no, 'subject6', subject6 FROM yourtable
UNION ALL
SELECT roll_no, 'subject7', subject7 FROM yourtable

关于SQL查询将列转换为行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10465668/

相关文章:

sql - 如果更新....Where 不影响任何行,是否创建了任何锁?

sql - 如何正确转义 SQL "LIKE"运算符的用户输入? (Postgres)

SQL Server INSERT 触发器如何获取当前行的数据

sql - 将更新的列返回到数组变量中

mysql - 由于重叠日期从 MySQL 表中删除冗余条目

SQL - 根据特定列值创建两个新行条目

带有基于基值的子查询的 SQL 查询

sql - 两个电子邮件地址表,返回一个不在另一个的地方

mysql - 在更新期间只为我的查询锁定表?

php - 列出当前日期(现在)之间 1 周内的所有记录