Sql 将多行合并为具有标题名称的单行
我的问题是,但我从不同的表中获取数据:Sql 将多行合并为具有标题名称的单行,sql,sql-server,database,pivot,pivot-without-aggregate,Sql,Sql Server,Database,Pivot,Pivot Without Aggregate,我的问题是,但我从不同的表中获取数据: Name ID Subject-name obtained-marks gumman 9 English 3 gumman 9 Islamic-Studies 4 gumman 9 Pak Studies 3 我想要这样的输出: ID Name English Islamic-Studies Pak-studies 9 gumman 3
Name ID Subject-name obtained-marks
gumman 9 English 3
gumman 9 Islamic-Studies 4
gumman 9 Pak Studies 3
我想要这样的输出:
ID Name English Islamic-Studies Pak-studies
9 gumman 3 4 3
我该怎么做?试试这个:
select ID,
Name,
[English],
[Islamic-Studies],
[Pak Studies]
from YourTable
pivot
(
min([obtained-marks]) for [Subject-name] in ([English],
[Islamic-Studies],
[Pak Studies])
) as P
Select s.ID, s.Name,
MAX(case WHEN s.SubjectName = 'English' THEN s.ObtainedMarks end) as 'English',
MAX(case WHEN s.SubjectName = 'Islamic-Studies' THEN s.ObtainedMarks end) as 'Islamic-Studies',
MAX(case WHEN s.SubjectName = 'Pak Studies' THEN s.ObtainedMarks end) as 'Pak-studies'
From Students s
GROUP BY s.ID, s.Name
试试这个:
Select s.ID, s.Name,
MAX(case WHEN s.SubjectName = 'English' THEN s.ObtainedMarks end) as 'English',
MAX(case WHEN s.SubjectName = 'Islamic-Studies' THEN s.ObtainedMarks end) as 'Islamic-Studies',
MAX(case WHEN s.SubjectName = 'Pak Studies' THEN s.ObtainedMarks end) as 'Pak-studies'
From Students s
GROUP BY s.ID, s.Name
@Bogdansahelan补充道:“谢谢你们的帮助,我看到了演示,但有一个小问题。”。想象一下,受试者的名字是未知的,那么,我们怎么能在demo@user1337945,如果主题列表是未知的,则列的标题是未知的,在这种情况下,您应该动态地透视表数据,这是sql server中的常见问题。幸运的是,有很多解决办法。只需使用google for SQL server PIVOT表和动态列,您就会发现许多有用的线程,如:,和:感谢您帮助我管理我的帖子。我解决了我的问题。首先,我从数据库中获取相关主题,然后将循环中的主题名称与以下语句进行比较:`MAX(s.SubjectName='English'然后s.acquiredmarks end)作为`English',`并连接到查询中。最后我找到了我的结果。@BogdanSahlean补充道,“谢谢你们的帮助,我看到了演示,但有一个小问题。”。想象一下,受试者的名字是未知的,那么,我们怎么能在demo@user1337945,如果主题列表是未知的,则列的标题是未知的,在这种情况下,您应该动态地透视表数据,这是sql server中的常见问题。幸运的是,有很多解决办法。只需使用google for SQL server PIVOT表和动态列,您就会发现许多有用的线程,如:,和:感谢您帮助我管理我的帖子。我解决了我的问题。首先,我从数据库中获取相关主题,然后将循环中的主题名称与以下语句进行比较:`MAX(s.SubjectName='English'然后s.acquiredmarks end)作为`English',`并连接到查询中。最后我找到了我的结果。