我正在使用 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] 删除。
我来说两句