2014-04-04 201 views
2

我幾天來一直在學校項目中工作,並且選擇了在DVD俱樂部數據庫上工作。我有六張桌子,但對於這個問題,只有兩個是相關的。客戶表和貸款表。所以,我想要做的是計算每一個客戶到目前爲止他所獲得的貸款數量,以及最多的貸款數量,以便他可以在下個月獲得免費DVD。這是我寫的代碼,但它不挑特定的客戶端,它表明具有特定客戶的貸款的最大數量的所有客戶端:在特定列中選擇具有最大值的行,SQL Server

SELECT tblClients.Client_ID, MAX(x.Number_Of_Loans) AS MAX_NOL 
FROM 
(
SELECT COUNT(tblLoans.Client_ID) AS Number_Of_Loans 
FROM tblClients, tblLoans WHERE tblClients.Client_ID=tblLoans.Client_ID 
GROUP BY tblLoans.Client_ID 
)x, tblClients, tblLoans 
WHERE tblClients.Client_ID=tblLoans.Client_ID 
GROUP BY tblClients.Client_ID, tblClients.Given_Name, 
tblClients.Family_Name, tblClients.Phone, tblClients.Address, tblClients.Town_ID 

回答

2

使用以下

SELECT TOP 1 tblClients.Client_ID,COUNT(tblLoans.Client_ID) AS MAX_NOL 
FROM tblClients, tblLoans 
WHERE tblClients.Client_ID=tblLoans.Client_ID 
GROUP BY tblClients.Client_ID 
ORDER BY COUNT(tblLoans.Client_ID) DESC 
+0

哇,非常感謝,我剛剛更改GROUP BY到tblClients.Client_ID,因爲我得到一個錯誤。 – AIV

+1

謝謝。我已經注意到並修改了查詢:) – Madhivanan

1

您可以用單一的綜合集團,由客戶與最大貸款下令這樣做:必須包含在GROUP

SELECT TOP 1 tblClients.Client_ID, tblClients.Given_Name, tblClients.Family_Name, 
     tblClients.Phone, tblClients.Address, tblClients.Town_ID, 
     COUNT(x.Number_Of_Loans) AS MAX_NOL 
FROM 
    tblClients INNER JOIN tblLoans 
    ON tblClients.Client_ID=tblLoans.Client_ID 
GROUP BY tblClients.Client_ID, tblClients.Given_Name, tblClients.Family_Name, 
     tblClients.Phone, tblClients.Address, tblClients.Town_ID 
ORDER BY MAX_NOL DESC; 

任何選擇從客戶端列,我會建議使用JOINs而不是WHERE加入。

編輯
什麼可能是整潔是分裂最貸款客戶端Id的決心和中獲取客戶端的數據的其餘部分的關注,像這樣(而非笨拙GROUP BY在許多列):

SELECT c.Client_ID, c.Given_Name, c.Family_Name, 
     c.Phone, c.Address, c.Town_ID, 
     x.MaxLoans 
FROM 
    tblClients c 
    INNER JOIN 
    (SELECT TOP 1 tblClients.Client_ID, COUNT(tblLoans.Client_ID) AS MaxLoans 
     FROM tblClients 
     INNER JOIN tblLoans 
     ON tblClients.Client_ID=tblLoans.Client_ID 
     GROUP BY tblClients.Client_ID 
     ORDER BY MaxLoans DESC) x 
    ON c.Client_ID = x.Client_ID; 
相關問題