2015-11-14 121 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

请记住接受这个答案是正确的,如果解决了你的问题 –