有没有办法在单个查询中使用 BETWEEN 子句获取日期范围内已售游戏的总数(使用或不使用 CASE 语句)?

Dat*_*eau -1 sql sql-server date case between

我已经尝试过下面的代码,但它抛出一个错误:

SELECT Publisher, SUM(Global_Sales) AS total_games_sold, Year,
CASE 
WHEN Year < 1989 THEN SUM(Global_Sales)
WHEN Year BETWEEN 1990 AND 1999 THEN SUM(Global_Sales)
WHEN Year BETWEEN 2000 AND 2009 THEN SUM(Global_Sales)
ELSE Year > 2009 END AS Dates
FROM Vgsales
ORDER BY Year;
Run Code Online (Sandbox Code Playgroud)

Zho*_*rov 6

如果我正确理解您的问题,您需要使用SUM条件:

数据:

SELECT *
INTO Vgsales
FROM (VALUES
   ('Publisher One', 1000, 1988),
   ('Publisher One', 2000, 1990),
   ('Publisher One', 3000, 1991),
   ('Publisher One', 4000, 2001),
   ('Publisher One', 5000, 2010)
) v (Publisher, Global_Sales, [Year])
Run Code Online (Sandbox Code Playgroud)

陈述:

SELECT 
   Publisher, 
   SUM(Global_Sales) AS [total_games_sold], 
   SUM(CASE WHEN Year < 1989 THEN Global_Sales END) AS [1989_games_sold],
   SUM(CASE WHEN Year BETWEEN 1990 AND 1999 THEN Global_Sales END) AS [1990_1999_games_sold],
   SUM(CASE WHEN Year BETWEEN 2000 AND 2009 THEN Global_Sales END) AS [2000_2009_games_sold],
   SUM(CASE WHEN Year > 2009 THEN Global_Sales END) AS [2009_games_sold]
FROM Vgsales
GROUP BY Publisher
ORDER BY Publisher
Run Code Online (Sandbox Code Playgroud)

结果:

出版商 已售游戏总数 1989_games_sold 1990_1999_games_sold 2000_2009_games_sold 2009_games_sold
出版商一 15000 1000 5000 4000 5000