Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.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 Server/T-SQL_Sql_Sql Server_Tsql_Stored Procedures - Fatal编程技术网

在具有不同单元格的表中计算-SQL Server/T-SQL

在具有不同单元格的表中计算-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

我的数据库(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    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
  • 我怎么能在球场上环游“球队”,知道巴塞罗那、皇家马德里和切尔西都有这样的记录
  • 然后我想计算每个队的队员总数 巴塞罗那:->10+10+10+15=45

    对于皇家马德里:->20+26=46

    对于切尔西:->26+23+22=71

  • 将每个结果填入单独的变量中
  • 整个计算应该在存储过程中完成

    第二件事,如果我有一张这样的桌子:

     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
    
  • 我怎么能在球场上环游“球队”,知道巴塞罗那、皇家马德里和切尔西都有这样的记录
  • 之后,我想用目标类型HeaderGoal和FreeKickGoal计算每个团队的所有目标之和
  • 举例

    ->巴塞罗那:2+1+1=4

    ->皇家马德里:1+1=2

    ->切尔西:2+3+4=9

  • 将每个结果填入单独的变量中
  • 整个计算应该在存储过程中完成

    我希望你能帮助我!
    如果我正确理解了你的问题,那么看起来你想要的是每个组的集合,这一点很容易通过子句实现

    对于第一个查询,您将使用:

    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