2013-02-18 33 views
1

我在使用SELECT語句時遇到問題我想選擇每個員工ID的最大餘額。我有這樣的桌子。獲取來自不同員工ID的餘額的最大值

EMPLOYE ID | BALANCES 
    c50-5050 | 100 
    c50-5050 | 200 
**c50-5050 | 300** 
    c50-5051 | 200 
**c50-5051 | 300** 

帶星號的那個表示我想從表中選擇什麼。

我實際上需要這個來顯示在VB.net的數據網格視圖。你有關於如何做到這一點的想法?

+0

給一試'SELECT MAX(餘額)FROM MY_TABLE GROUP BY僱工ID' – Dotnet 2013-02-18 10:36:43

回答

2

您可以使用ROW_NUMBEROVER -clause:

WITH X AS 
(
    SELECT [EMPLOYE ID], BALANCES, 
      RN = ROW_NUMBER() OVER (PARTITION BY [EMPLOYE ID] ORDER BY BALANCES DESC) 
    FROM dbo.Table 
) 
SELECT EMPLOYE ID, BALANCES 
FROM X 
WHERE RN = 1 

我確實需要這在VB.net數據網格視圖顯示。你有 關於如何做到這一點的想法?

使用ADO.NET,您可以使用DataAdapter填充DataTable

Dim table = New DataTable() 
Dim sql = "see sql above" 
Using con = New SqlConnection(yourConnectionString) 
    Using da = New SqlDataAdapter(sql, con) 
     da.Fill(table) 
    End Using 
End Using 
DataGridView1.DataSource = table 
+0

是比較現代'ROW_NUMBER'方法比老式的'MAX'和'GROUP BY'更受青睞? – AakashM 2013-02-18 10:38:33

+1

@AakashM:它更簡單,更容易維護。您也可以選擇所有列,而不是「GROUP BY」,其中每個柱必須被聚合。請注意,您可以將任何聚合函數與['OVER'-clause](http://msdn.microsoft.com/zh-cn/library/ms189461.aspx) 'MaxBalance = MAX(餘額)超過(由[員工編號]分配)'。 – 2013-02-18 10:41:07

1

嘗試下面的代碼。

SELECT EMPLOYEE_ID,MAX(balances) FROM TABLE_NAME 
GROUP BY EMPLOYEE_ID; 
1

使用的max()group by查詢應該這樣做

select max(balance), employe_id 
from yourTable 
group by employe_id