【发布时间】:2018-05-18 11:06:40
【问题描述】:
我已经在互联网上寻找解决方案,但到目前为止还没有。 以下是在 SID/ID 上连接的 2 个示例表
SID Name Attendance Class
1 abc good 1A
2 xyz bad 1B
3 dsk good 1A
4 uij bad 1B
5 sss bad 1A
6 fff good 1D
7 ccc good 1A
ID Lesson Result
1 Read Pass-67%
1 Write Pass-89%
1 Sing Pass-99%
2 Read Pass-75%
3 Sing Fail-47%
3 Read Pass-55%
4 Write Pass-90%
4 Sing Fail-10%
结果需要采用以下格式。 一行显示学生姓名,后跟一行学生的成绩。
如果学生没有任何结果,他们将不会被包括在内。
1, abc, good, 1A
1, Read, Pass-67%
1, Write, Pass-89%
1, Sing, Pass-99%
2, xyz, bad, 1B
2, Read, Pass-75%
3, dsk, good, 1A
3, Sing, Fail-47%
3, Read, Pass-55%
4, uij, bad, 1B
4, Write, Pass-90%
4, Sing, Fail-10%
我尝试使用 Union 无济于事,它类似于枢轴也没有任何运气。假设我在这里遗漏了一个技巧,我该如何完成?
如果数据更容易,我已经包含了数据!
CREATE TABLE RESULTS (ID Int, Lesson varchar(12), Result nvarchar(8))
insert into RESULTS (ID, Lesson, Result)
values
(1,'Read', 'Pass-67%'),
(1,'Write', 'Pass-89%'),
(1,'Sing', 'Pass-99%'),
(2,'Read', 'Pass-75%'),
(3,'Sing', 'Fail-47%'),
(3,'Read','Pass-55%'),
(4,'Write', 'Pass-90%'),
(4,'Sing', 'Fail-10%')
CREATE TABLE STUDENTS (ID int, Name varchar(5), Attendance nvarchar(10),
Class nvarchar (3))
insert into STUDENTS values
(1,'abc','good','1A'),
(2,'xyz','bad','1B'),
(3,'dsk','good','1A'),
(4,'uij','bad','1B'),
(5,'sss','bad','1A'),
(6,'fff','good','1D'),
(7,'ccc','good','1A')
【问题讨论】:
-
"显示学生姓名的一行,后面是学生成绩的行。"这并不是 SQL 的真正工作方式。表和结果集代表 无序 集。所以,“下一行”并没有真正的意义。尽管使用有点复杂的
order by可以做到这一点,但我会质疑为什么您不希望每一行都包含学生姓名。 -
这两个表之间没有关联(即外键)。加入这两个表?我错过了重点吗?还是您只是将这两张表混在一起?
-
另外,您需要提供一个到目前为止您尝试过的示例。
-
因此,您希望将第二列的含义交织为名称或课程,第三列表示出勤或结果 - 这是一个非常不寻常的要求,直觉上似乎是个坏主意。
-
我同意这不是最佳做法。但是,我正在使用另一个程序,它只导入这种格式的数据。
标签: sql sql-server join pivot