select 中的子查询在 SQL 服务器中不工作

Subquery in select not working in SQL Server

我正在使用 SQL 服务器,但它不接受我的代码(见下文 error/result)。我的目标是在每一列中显示每个游戏平台全球销量排名前 10 的游戏

SELECT TOP 10 
    (SELECT g_name FROM vgsales$ WHERE g_platform = 'X360') AS g_namex360, 
    (SELECT g_name FROM vgsales$ WHERE g_platform = 'PS2') AS g_nameps2
FROM 
    vgsales$
ORDER BY 
    Global_Sales;

错误结果:

子查询返回了 1 个以上的值。当子查询跟在 =、!=、<、<=、>、>= 或子查询用作表达式时,这是不允许的。

下面是 table vgsales$

CREATE TABLE vgsales$ (
g_rank INT,
g_name VARCHAR(100),
g_platform VARCHAR(100),
g_year INT,
g_genre VARCHAR(100),
g_publisher VARCHAR(100),
Global_Sales INT
);

您在 select 语句中使用的子查询应该 return 查询的单个值 运行 没有错误。以下查询将 运行 没有任何问题,但它不会给您预期的结果。

SELECT TOP 10
    (SELECT g_name FROM vgsales$ x WHERE g_platform = 'X360' AND a.g_rank = x.g_rank) AS g_namex360, 
    (SELECT g_name FROM vgsales$ p WHERE g_platform = 'PS2' AND a.g_rank = p.g_rank) AS g_nameps2
FROM 
    vgsales$ a
ORDER BY 
    Global_Sales;
 

以下查询,虽然可能不是您想要的格式,但会return得到正确的结果。

WITH cte AS
(
    SELECT
       *,
       ROW_NUMBER() OVER(PARTITION BY g_platform ORDER BY Global_Sales DESC) AS RN
    FROM vgsales$ 
)
SELECT *
FROM cte
WHERE RN <= 10