Sql server SQL DateAdded函数和求和问题

Sql server SQL DateAdded函数和求和问题,sql-server,sum,case,dateadd,Sql Server,Sum,Case,Dateadd,我有以下疑问: SELECT p.name as Name, SUM(r.attempts) as Attempts, SUM(r.gains) as Positive, SUM(r.losses) as Negative, SUM(r.yards) as Net, SUM(r.touchdowns) as TD, SUM(r.longest) as Long, year(g.date_) as Season FROM Rush AS r I

我有以下疑问:

SELECT 
    p.name as Name, SUM(r.attempts) as Attempts, SUM(r.gains) as Positive,       
    SUM(r.losses) as Negative, SUM(r.yards) as Net, SUM(r.touchdowns) as TD,
    SUM(r.longest) as Long, year(g.date_) as Season 
FROM 
    Rush AS r 
INNER JOIN                
    PlayerGame AS pg ON r.playerGame_Id = pg.playerGame_Id 
INNER JOIN 
    Players AS p ON p.player_Id = pg.player_Id
INNER JOIN 
    Games as g ON g.game_Id = pg.game_Id 
WHERE
    g.date_ LIKE CASE 
                    WHEN month(g.date_) = 1 
                       THEN DATEADD(year, -1, g.date_)
                    ELSE g.date_ 
                 END
GROUP BY
    year(date_), name
ORDER BY 
    Season DESC, Attempts DESC, Positive, Negative, Net, TD, Long

我试图得到每个赛季所有统计数据的总和。我正试图把一月份所有的额外比赛都加在一个完整的赛季里。当我运行此查询时,季节与一月日期是分开的。然而,对于一月份的所有比赛,它并没有将它们添加到所有尝试、码数等的总和中。如果有人能提供帮助,或者如果你需要额外的背景,请告诉我。谢谢

你应该用一年加一个月 这是针对mysql的

SELECT p.name as Name, SUM(r.attempts) as Attempts, SUM(r.gains) as Positive,       
SUM(r.losses) as Negative, SUM(r.yards) as Net, SUM(r.touchdowns) as TD,
SUM(r.longest) as Long, year(DATE_SUB(date_,INTERVAL 1  MONTH)) as Season 
FROM Rush AS r INNER JOIN                
PlayerGame AS pg ON r.playerGame_Id = pg.playerGame_Id 
INNER JOIN Players AS p ON p.player_Id = pg.player_Id
INNER JOIN Games as g ON g.game_Id = pg.game_Id 

Group by year(DATE_SUB(date_,INTERVAL 1  MONTH)), name
Order by Season DESC, Attempts DESC, Positive, Negative, Net, TD, Long
这是针对sql server的

SELECT p.name as Name, SUM(r.attempts) as Attempts, SUM(r.gains) as Positive,       
SUM(r.losses) as Negative, SUM(r.yards) as Net, SUM(r.touchdowns) as TD,
SUM(r.longest) as Long, year(DATEADD(month, -1, date_)) as Season 
FROM Rush AS r INNER JOIN                
PlayerGame AS pg ON r.playerGame_Id = pg.playerGame_Id 
INNER JOIN Players AS p ON p.player_Id = pg.player_Id
INNER JOIN Games as g ON g.game_Id = pg.game_Id 

Group by year(DATEADD(month, -1, date_)), name
Order by Season DESC, Attempts DESC, Positive, Negative, Net, TD, Long

创建一个包含列
季节
季节开始
季节结束
的表
季节

SELECT p.name as Name, SUM(r.attempts) as Attempts, SUM(r.gains) as Positive,       
SUM(r.losses) as Negative, SUM(r.yards) as Net, SUM(r.touchdowns) as TD,
SUM(r.longest) as Long, s.Season as Season 
FROM Rush AS r INNER JOIN                
PlayerGame AS pg ON r.playerGame_Id = pg.playerGame_Id 
INNER JOIN Players AS p ON p.player_Id = pg.player_Id
INNER JOIN Games as g ON g.game_Id = pg.game_Id 
INNER JOIN Seasons AS s on g.date_ BETWEEN s.SeasonStart AND s.SeasonEnd
Group by s.Season, name
Order by s.Season DESC, Attempts DESC, Positive, Negative, Net, TD, Long

然后,对特殊日期逻辑的需求消失了,并用表格表示。

你的意思是你的赛季从2月开始到1月结束?是的,本质上你需要重复你的“案例”逻辑。然而,从长远来看,我会有一个季节表,我会在我的回答中概述你使用的是哪个DBMS?我使用的是SSMSit告诉我DATE_SUB不是一个内置函数,你使用的是哪个db?我使用的是SSMSi have add version for sql server太希望有用了它仍然没有将每个统计的总和相加在一起