2015-11-16 52 views
0

我想获得排的总结果。例如,如果数据库中有10条记录,所以输出应该是10SQL获取输出总数

我查询这种

select COUNT(*) AS NumberRow from 
(SELECT TOP 30 PERCENT [EmpName], sum(Scoring) as GrandTotal 
FROM [masterView] GROUP BY [EmpName] 
ORDER BY GrandTotal DESC,EmpName ASC) 

但有一个错误: -

的错误是:

Msg 102, Level 15, State 1, Line 4 Incorrect syntax near ')'.

回答

1

你应该别名子查询:

SELECT COUNT(*) AS NumberRow 
FROM (SELECT TOP 30 PERCENT 
        [EmpName] , 
        SUM(Scoring) AS GrandTotal 
      FROM  [masterView] 
      GROUP BY [EmpName] 
      ORDER BY GrandTotal DESC , 
        EmpName ASC 
     ) t 

您可以使用窗口函数像聚合混合数据:如Giorgi的具有上述

SELECT *, COUNT(*) OVER() AS NumberRow 
FROM (SELECT TOP 30 PERCENT 
        [EmpName] , 
        SUM(Scoring) AS GrandTotal 
      FROM  [masterView] 
      GROUP BY [EmpName] 
      ORDER BY GrandTotal DESC , 
        EmpName ASC 
     ) t 
+0

第一个查询看起来更加不错:) +1 –

+0

@RahulTripathi,是的,但再有就是冗余列将选择'[EmpName], SUM(评分)AS GrandTotal' –

+0

是的,同意了! :) –

0

别名的事情肯定会工作。但是,如果您的数据库有10条员工记录,那么您的查询将只返回3条记录,而不是10条,因为您选择的是TOP 30 PERCENT。下面的查询应该返回10条记录。

select COUNT(*) AS NumberRow from 
( SELECT [EmpName], sum(Scoring) as GrandTotal 
    FROM [masterView] GROUP BY [EmpName] 
    ORDER BY GrandTotal DESC,EmpName ASC 
)temp