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)?
谢谢.
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称为"列别名",也可用于从连接中的不同表中检索具有相同名称的列,并且在结果集中仍具有唯一的名称.