Ms-Access

SQL/Access:遍歷查詢的結果以在另一個的 WHERE 子句中使用

  • May 11, 2018

只是作為序言,我對一般數據庫非常糟糕(感謝耐心)。

我有一個結構如下的表:


團隊 |人員 |遊戲 |得分
_______|_______|_____|_____|
蘋果 |bob |A |30
蘋果|鮑勃|B |15
蘋果 |克里斯 |A |13
蘋果 |克里斯 |B |2
橘子|莎莉|A |15
橘子|莎莉|B |39
橘子|蒂娜|A |19
橘子|蒂娜|B |27
香蕉|拉里 |A |34
香蕉|拉里|B |30
香蕉|哈利|A |33
巴納薩斯|哈利|B |13
香蕉|查爾斯|A |32
香蕉|查爾斯|B |28

我想生成輸出,顯示誰在每場比賽中得分最高以及他們來自哪支球隊。

例子:


遊戲 |團隊 |人員 |得分
______|_______|________|_____|
一個 |香蕉|拉里 |34
B |橙子|莎莉 |39

這就是我的目的:

我可以通過以下方式獲取遊戲列表:

SELECT DISTINCT(GAME) from table;

我可以通過以下方式從特定遊戲中獲得最高得分者:

SELECT TOP 1 GAME,TEAM,PERSON,SCORE from table WHERE GAME='A' ORDER BY SCORE DESC;

我在第二個查詢中使用 DISTINCT() 查詢的結果作為 WHERE 子句的一部分時遇到問題的部分。在我的簡單數據庫中數據是動態的。

希望這可以通過一些 SQL 功夫來解決,但是:如果有更好的方法來建構我的數據庫,我絕對願意接受這些建議(現在,它是一個單表數據庫,數據每天被攝取/覆蓋,數據集預計尺寸不會增長到有問題的尺寸,我真的不知道我在做什麼)

謝謝!

您可以使用子查詢來執行此操作,以獲得每場比賽的最高得分,而外部查詢則可以獲取比賽的詳細資訊。僅供參考:這是在 MS SQL 中測試的,而不是 MS-Access(抱歉沒有安裝),但語法應該非常相似。

SELECT t.* 
FROM tablename AS t 
JOIN (
   SELECT GAME, MAX(SCORE) AS MAXSCORE
   FROM tablename
   GROUP BY GAME
   ) AS MAXGAMES 
   ON ( t.GAME  = MAXGAMES.GAME 
    AND t.SCORE = MAXGAMES.MAXSCORE )
ORDER BY t.GAME ;

引用自:https://dba.stackexchange.com/questions/206512