无法在SQL Server中使用group by

时间:2018-04-20 17:50:39

标签: sql sql-server stored-procedures

我正在学习如何在SQL Server中使用Group By,我正在尝试编写一个查询,让我可以从表格中的Alumns获取所有信息。

我的表格如下:

 Name | Alumn_ID | Course | Credits | Passed
 Peter    1         Math       2        YES
 John     2         Math       3        YES
 Thomas   3         Math       0        NO
 Peter    1        English     3        YES
 Thomas   2        English     2        YES
 John     3        English     0        NO

我想要的结果如下:

Alumn | Total_Credits | Courses | Passed | Not_Passed
Peter        5             2         2          0
John         5             2         2          0
Thomas       0             2         0          2

我知道我必须使用Group ByCOUNT但是因为我是初学者而被困,我真的不知道如何分开{{ 1}}和Passed在表格中PASSED列的结果中,提前谢谢

3 个答案:

答案 0 :(得分:3)

localhost:7687

我认为没有通过再制定的手段。

答案 1 :(得分:1)

以下示例将按照您的要求进行。

create table Alumns
(
    Name varchar(30) not null
   ,Alumn_Id int not null
   ,Course varchar(30) not null
   ,Credits int not null
   ,passed varchar(3) not null
)
GO

insert into Alumns
(Name, Alumn_ID, Course, Credits, Passed)
values
 ('Peter', 1, 'Math', 2, 'YES')
,('John', 2, 'Math', 3, 'YES')
,('Thomas', 3, 'Math', 0, 'NO')
,('Peter', 1, 'English', 3, 'YES')
,('John', 2, 'English', 2, 'YES')
,('Thomas', 3, 'English', 0, 'NO')
GO



select al.Alumn_Id,al.Name
, Sum(al.Credits) as [Total Credits]
, Count(al.Course) as Courses
, Sum(case al.passed when 'YES' then 1 else 0 end) as Passed
, Sum(case al.passed when 'NO' then 1 else 0 end) as [Not Passed]
from dbo.Alumns al
group by al.Alumn_Id, al.Name

但请注意,由于数据不正确,您将收到错误消息。 看看你自己的例子,其中约翰和彼得的数学/英语行有错误的ID。

这样你永远不会以正确的结果结束,这就是为什么按照ID分组的好习惯。

修改 我看到你更正了你的示例数据是的,这样可以获取你想要的确切结果。

答案 2 :(得分:0)

您可以使用Passed功能分隔Not_PassedCASE

SELECT MAX([name]) AS [Name],
SUM(Credits) AS Total_Credits, 
COUNT(Course) AS Courses, 
SUM(CASE WHEN Passed='Yes' THEN 1 ELSE 0 END) AS Passed,
SUM(CASE WHEN Passed='No' THEN 1 ELSE 0 END) AS Not_Passed
FROM TableName
GROUP BY Alumn_ID

但是,我不认为您的表(两个表)的值都是正确的。请再次检查。例如,根据您的表,John有两个Alumn_ID(2和3)。如果这是两个不同的约翰,那么你应该改变你想要的结果。

结果

+--------+---------------+---------+--------+------------+
|  Name  | Total_Credits | Courses | Passed | Not_Passed |
+--------+---------------+---------+--------+------------+
| Peter  |             5 |       2 |      2 |          0 |
| John   |             3 |       1 |      1 |          0 |
| Thomas |             2 |       3 |      1 |          2 |
+--------+---------------+---------+--------+------------+