選擇中的子查詢在 SQL Server 中不起作用

安東

我正在使用 SQL Server,但不知何故它不會接受我的代碼(請參閱下面的錯誤/結果)。我的目標是在每列中指出每個遊戲平台的全球銷量前 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 個以上的值。當子查詢跟隨 =、!=、<、<=、>、>= 或當子查詢用作表達式時,這是不允許的。

下面是表格 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 語句中使用的子查詢應該返回單個值,以便您的查詢運行而不會出錯。以下查詢將毫無問題地運行,但不會給您預期的結果。

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;
 

以下查詢雖然可能不是您想要的格式,但將返回正確的結果。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章