在具有不同单元格的表中计算-SQL Server/T-SQL
我的数据库(SQL Server 2008 R2)中有一个如下表:在具有不同单元格的表中计算-SQL Server/T-SQL,sql,sql-server,tsql,stored-procedures,Sql,Sql Server,Tsql,Stored Procedures,我的数据库(SQL Server 2008 R2)中有一个如下表: ID......Team...........Name......Age 102 Barcelona Mike 15 103 Barcelona Peter 10 104 Barcelona Jacke 10 105 Barcelona Jonas 10 106 Real Madrid Michae
ID......Team...........Name......Age
102 Barcelona Mike 15
103 Barcelona Peter 10
104 Barcelona Jacke 10
105 Barcelona Jonas 10
106 Real Madrid Michael 20
107 Real Madrid Terry 26
108 Chelsea James 26
109 Chelsea Arthur 23
110 Chelsea Spence 22
ID......Team...........Name......HeaderGoal......FreeKickGoal
104 Barcelona Mike 2 1
105 Barcelona Peter 1 0
106 Real Madrid Michael 0 1
107 Real Madrid Terry 0 1
108 Chelsea James 0 0
109 Chelsea Arthur 2 3
110 Chelsea Spence 4 0
INSERT table_with_team_and_goals
SELECT team, SUM(headergoal + freekickgoal)
FROM table
GROUP BY team
ID......Team...........Name......Age
102 Barcelona Mike 15
103 Barcelona Peter 10
104 Barcelona Jacke 10
105 Barcelona Jonas 10
106 Real Madrid Michael 20
107 Real Madrid Terry 26
108 Chelsea James 26
109 Chelsea Arthur 23
110 Chelsea Spence 22
ID......Team...........Name......HeaderGoal......FreeKickGoal
104 Barcelona Mike 2 1
105 Barcelona Peter 1 0
106 Real Madrid Michael 0 1
107 Real Madrid Terry 0 1
108 Chelsea James 0 0
109 Chelsea Arthur 2 3
110 Chelsea Spence 4 0
INSERT table_with_team_and_goals
SELECT team, SUM(headergoal + freekickgoal)
FROM table
GROUP BY team
如果我正确理解了你的问题,那么看起来你想要的是每个组的集合,这一点很容易通过子句实现 对于第一个查询,您将使用:
SELECT team, SUM(age) AS 'Sum of the team'
FROM table
GROUP BY team
这将产生以下结果:
Team Sum of the team
-------------------- ---------------
Barcelona 45
Chelsea 71
Real Madrid 46
Team Sum of goals
-------------------- ------------
Barcelona 4
Chelsea 9
Real Madrid 2
第二点:
SELECT team, SUM(headergoal + freekickgoal) AS 'Sum of goals'
FROM table
GROUP BY team
这将产生以下结果:
Team Sum of the team
-------------------- ---------------
Barcelona 45
Chelsea 71
Real Madrid 46
Team Sum of goals
-------------------- ------------
Barcelona 4
Chelsea 9
Real Madrid 2
在您的示例数据中,您将切尔西第一部分的期望结果列为45,但我想这只是一个输入错误,因为您在计算中遗漏了一行
至于把它变成一个存储过程,我可以告诉你,这很容易,请你参考,因为我不会为你做所有的工作
编辑:添加了合并到作为对注释的响应:
要将第二个查询的结果插入到现有表中,可以使用如下简单的insert
语句:
ID......Team...........Name......Age
102 Barcelona Mike 15
103 Barcelona Peter 10
104 Barcelona Jacke 10
105 Barcelona Jonas 10
106 Real Madrid Michael 20
107 Real Madrid Terry 26
108 Chelsea James 26
109 Chelsea Arthur 23
110 Chelsea Spence 22
ID......Team...........Name......HeaderGoal......FreeKickGoal
104 Barcelona Mike 2 1
105 Barcelona Peter 1 0
106 Real Madrid Michael 0 1
107 Real Madrid Terry 0 1
108 Chelsea James 0 0
109 Chelsea Arthur 2 3
110 Chelsea Spence 4 0
INSERT table_with_team_and_goals
SELECT team, SUM(headergoal + freekickgoal)
FROM table
GROUP BY team
或者,合并到
中,如果您打算多次运行查询,这可能会更好(如果目标表中已经存在团队,则会更新目标表):
此查询将提供每个球员和每个球队的总进球数。如何区分头球和任意球?非常感谢您的回答。是的,你的权利,那是一个打字错误。不,这就够了,你不必为我做所有的工作:-)谢谢你的推荐。@Bk_uuu很乐意帮忙。如果答案对你有帮助,请考虑接受和/或投票:)一个问题…是否有可能将结果写在表格中?与SELECT语句的结果相同。@Bk_uu不确定我是否得到了您想要的结果,但如果要将前两个查询的结果都放到一个新表中,那当然是可能的。Mhh。。我的问题更多的是关于主要问题的第二部分。headergoal和freekickgoal的选择结果应该写在一个表中(该表是allready exist),其中包含字段“team”和“goals”。我应该知道哪个命令来实现这一点?
-- Sum age by team
SELECT Team, SUM(Age) SumAge
FROM
(
SELECT Id, Team, Name, Age FROM
(
VALUES
(102, 'Barcelona' , 'Mike' , 15),
(103, 'Barcelona' , 'Peter' , 10),
(104, 'Barcelona' , 'Jacke' , 10),
(105, 'Barcelona' , 'Jonas' , 10),
(106, 'Real Madrid', 'Michael', 20),
(107, 'Real Madrid', 'Terry' , 26),
(108, 'Chelsea' , 'James' , 26),
(109, 'Chelsea' , 'Arthur' , 23),
(110, 'Chelsea' , 'Spence' , 22)
) AS X(Id, Team, Name, Age)
) X
GROUP BY Team
-- Sum goals by team
SELECT Team, SUM(HeaderGoal + FreeKickGoal) Goals
FROM
(
SELECT Id, Team, Name, HeaderGoal, FreeKickGoal FROM
(
VALUES
(104, 'Barcelona' , 'Mike' , 2, 1),
(105, 'Barcelona' , 'Peter' , 1, 0),
(106, 'Real Madrid', 'Michael', 0, 1),
(107, 'Real Madrid', 'Terry' , 0, 1),
(108, 'Chelsea' , 'James' , 0, 0),
(109, 'Chelsea' , 'Arthur' , 2, 3),
(110, 'Chelsea' , 'Spence' , 4, 0)
) AS X(Id, Team, Name, HeaderGoal, FreeKickGoal)
) X
GROUP BY Team