2015-11-14 140 views
-1

我有一個查詢,可以選擇TOP00 TOP TOP 20%與GrandTotal。但有一些不公平。例如,在與前20個10人是2所以出來的說就是顯示此:SELECT TOP 20%SQL

EmpName GrandTotal 
Kelvin  50 
Gem   40 

但總計第三,並且還具有40總計4人。我需要一些想法和建議,我將如何解決這個問題?

SELECT TOP 20 PERCENT 
    EmpName, 
    SUM(Scoring) AS GrandTotal 
FROM 
    [masterView] 
GROUP BY 
    EmpName 
ORDER BY 
    GrandTotal DESC, EmpName ASC 
+4

標籤數據庫中正在使用的輸出 –

+1

你是否數據庫支持'rank'? –

+0

你可以使用你的查詢找到最低的grandTotal,然後選擇所有東西> =。 – maraca

回答

0

SQL Fiddle Demo

測試數據

CREATE TABLE Table1 
    ([ID] int, [Score] int) 
; 

INSERT INTO Table1 
    ([ID], [Score]) 
VALUES 
    (1, 10),  (2, 20), 
    (3, 30),  (4, 20), 
    (5, 10),  (6, 40), 
    (7, 40),  (8, 50), 
    (9, 10),  (10, 5); 

查詢

with ranked as (
    select 
     id, 
     rank() over (order by Score desc) as rnk 
    from Table1 
), 
total as (
    select count(*) as total 
    from Table1 
) 
SELECT * 
FROM ranked 
CROSS JOIN total 
WHERE ranked.rnk <= 0.2 * total.total 

| id | rnk | total | 
|----|-----|-------| 
| 8 | 1 | 10 | 
| 6 | 2 | 10 | 
| 7 | 2 | 10 | 
1

上的SQL Server,你可以使用WITH TIES以包括聯繫

SELECT TOP 20 PERCENT WITH TIES Id, sum(Score) as GrandTotal 
FROM myTable GROUP BY Id 
ORDER BY GrandTotal DESC 
+0

Id =員工ID? –

+0

謝謝。你剛剛解決了我的問題。這意味着WITH TIES會給我公平的結果。再次感謝。 –

+0

請記住接受這個答案是正確的,如果解決了你的問題 –