如何从子查询中获取返回的行

时间:2016-09-11 05:46:23

标签: sql sql-server oracle

我想从后续查询中获取行数:

select c1,count(*) from table    
group by c1 having count(*) > 1;

所以我在SQL server中编写sql语句,如下所示:

select count(*) from (    
select c1, count(*) from table   
   group by c1 having count(*) > 1); 

但是当我运行这个脚本时,我总是得到一个语法错误,这意味着在最后一个括号附近有语法错误。但是这个sql语句在Oracle中运行良好。

任何人都可以告诉我应该如何正确地在SQL服务器中编写它?

2 个答案:

答案 0 :(得分:0)

SQL Server需要alias个子选择名称。将缺少的alias名称添加到子选择以修复错误。

SELECT Count(*) 
FROM   (SELECT c1, 
               Count(*) cnt
        FROM   table 
        GROUP  BY c1 
        HAVING Count(*) > 1) a; --here  

但是有一个更简单的版本

SELECT TOP 1 Count(*)OVER() -- Distinct Count(*)OVER() 
FROM   table 
GROUP  BY c1 
HAVING Count(*) > 1 

答案 1 :(得分:0)

您可以使用:with创建临时结果集,然后对其运行另一个查询:

with mytable
as
(select c1, count(*) as cnt from table   
 group by c1 having count(*) > 1)
select count(*)
from mytable