SQL Server:将表与自身连接以水平显示数据

阿马尔

我有一个包含学生分数(StudentsID、Subject、Year、Mark)的表格。

我想水平显示同一学生、科目但不同年份的分数。

我的问题是并非所有学科都可以在所有年份开设,我的意思是学生每年可以选择不同的科目。我想在一张桌子上水平显示它们。

例子:

图 1

我试过这个查询

SELECT TOP (100) PERCENT 
    dbo.New_Portal_OldMarks.StudentID, dbo.New_Portal_OldMarks.[Student Name], 
    dbo.New_Portal_OldMarks.SubjectName, dbo.New_Portal_OldMarks.AcademicYear, 
    dbo.New_Portal_OldMarks.Class, dbo.New_Portal_OldMarks.Term1, dbo.New_Portal_OldMarks.Term2, 
    dbo.New_Portal_OldMarks.Term3, dbo.New_Portal_OldMarks.Final, 
    New_Portal_OldMarks_1.AcademicYear AS AcademicYear2, 
    New_Portal_OldMarks_1.Class AS Class2, 
    New_Portal_OldMarks_1.Term1 AS [Term1-2], 
    New_Portal_OldMarks_1.Term2 AS [Term2-2], 
    New_Portal_OldMarks_1.Term3 AS [Term3-2], 
    New_Portal_OldMarks_1.Final AS [Final-2]
FROM
    dbo.New_Portal_OldMarks 
FULL OUTER JOIN
    dbo.New_Portal_OldMarks AS New_Portal_OldMarks_1 ON dbo.New_Portal_OldMarks.StudentID = New_Portal_OldMarks_1.StudentID 
                                                     AND dbo.New_Portal_OldMarks.SubjectName = New_Portal_OldMarks_1.SubjectName
WHERE     
    (dbo.New_Portal_OldMarks.StudentID = 1004000)
ORDER BY 
    AcademicYear2

我尝试了所有连接查询(例如 JOIN、LEFT JOIN、RIGHT JOIN 等),但它们都返回错误的结果

戈登·利诺夫

您可以使用条件聚合:

SELECT om.ID, om.StudentID, om.[Student Name], om.SubjectName,
       MAX(CASE WHEN om.class = 11 THEN academicyear END) as academicyear,
       MAX(CASE WHEN om.class = 11 THEN class END) as class,
       MAX(CASE WHEN om.class = 11 THEN term1 END) as term1,
       MAX(CASE WHEN om.class = 11 THEN term2 END) as term2,
       MAX(CASE WHEN om.class = 11 THEN term3 END) as term3,
       MAX(CASE WHEN om.class = 11 THEN final END) as final,
       MAX(CASE WHEN om.class = 12 THEN academicyear END) as academicyear,
       MAX(CASE WHEN om.class = 12 THEN class END) as class,
       MAX(CASE WHEN om.class = 12 THEN term1 END) as term1,
       MAX(CASE WHEN om.class = 12 THEN term2 END) as term2,
       MAX(CASE WHEN om.class = 12 THEN term3 END) as term3,
       MAX(CASE WHEN om.class = 12 THEN final END) as final              
FROM dbo.New_Portal_OldMarks om
GROUP BY om.ID, om.StudentID, om.[Student Name], om.SubjectName

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用PIVOT水平显示SQL表数据

来自分类Dev

SQL:将表与自身连接并允许结果为空

来自分类Dev

在SQL Server中水平连接两个以上的表

来自分类Dev

从Excel将数据导入SQL Server表

来自分类Dev

将 XML 数据读入 SQL Server 表

来自分类Dev

SQL Server:使用自身的汇总更新表

来自分类Dev

将表联接到自身SQL

来自分类Dev

将表右联接到自身SQL

来自分类Dev

SQL:将表联接到自身上

来自分类Dev

将表右联接到自身SQL

来自分类Dev

我想通过连接和动态将一些数据转换为 SQL Server 中的数据透视表

来自分类Dev

连接表时从SQL Server返回重复的数据

来自分类Dev

SQL Server:连接两个数据透视表

来自分类Dev

为什么SQL Server的查询优化器将表与其自身联接?

来自分类Dev

为什么SQL Server的查询优化器将表与其自身联接?

来自分类Dev

将Temp列的结果连接到表SQL Server

来自分类Dev

将字符串与实际表SQL SERVER连接

来自分类Dev

sql server 连接不显示

来自分类Dev

从SQL Server表将数据插入Excel工作表的列

来自分类Dev

将数据从SQL Server数据库导入HTML表

来自分类Dev

将2 #temp表与来自不同服务器的数据连接在一起SQL Server

来自分类Dev

将IntelliJ IDEA连接到SQL Server数据库

来自分类Dev

将 Xamarin.Android 与 SQL Server 数据库连接

来自分类Dev

SQL Server Management Studio未显示表的正确数据空间

来自分类Dev

在SQL Server数据透视表中显示串联的字段

来自分类Dev

MS SQL Server-将列转换为行时,表中的所有数据均未显示

来自分类Dev

在SQL Server中动态将垂直数据转换为水平数据

来自分类Dev

如何将xml数据插入SQL Server表?

来自分类Dev

将数据从文本文件插入表SQL Server

Related 相关文章

热门标签

归档