SQL查询语句

Ali*_*Ali 2 mysql sql ms-access

我怎样才能改变

SID Name Math English French
1   Sam  16   17      19
2   Tom  18   14      12
3   Al   90   33      2
Run Code Online (Sandbox Code Playgroud)

至:

SID subject   Mark
1   Math      16
1   English   17
1   French    19
2   Math      18
2   English   14
2   French    12
3   Math      90
3   English   33
3   French    2  
Run Code Online (Sandbox Code Playgroud)

使用SQL(如果可能的话,MYsql和MS Access)?

谢谢.

a_h*_*ame 5

SELECT sid, 'Math' as subject, math as mark
FROM your_table
UNION ALL
SELECT sid, 'English' as subject, english as mark
FROM your_table
UNION ALL
SELECT sid, 'French' as subject, french as mark
FROM your_table
Run Code Online (Sandbox Code Playgroud)

但问题的根本原因是数据库设计错误.这些主题不应该首先是列,应该存储在一个非常类似于您想要的输出的表中.

编辑

那它是做什么的?

SELECT sid, 'Math' as subject, math as mark
FROM your_table
Run Code Online (Sandbox Code Playgroud)

返回sid列,一个"虚拟"列,其中'Math'包含名称的硬编码值subject.由于您尚未将值存储在'Math'某处,因此必须进行硬编码.然后它最后也math使用名称选择列mark.注意之间的差异math'Math'-一个是列另一个字符串文字,因为单引号.

这是针对所有三个科目完成的(如果你有四个科目,你需要在UNION中有四个部分)

UNION ALL将所有三个SELECT组合成一个查询.andr解决方案(由不理解它的人淹没)通过明确地将其放入派生表(或内联视图)使得这更加清晰.

单独运行每个SELECT以查看各个部件正在执行的操作.

该部件as mark称为"列别名",也可用于从连接中的不同表中检索具有相同名称的列,并且在结果集中仍具有唯一的名称.