Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将多行合并为具有标题名称的单行_Sql_Sql Server_Database_Pivot_Pivot Without Aggregate - Fatal编程技术网

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',`并连接到查询中。最后我找到了我的结果。