Sql 如何为COUNT指定查询?

Sql 如何为COUNT指定查询?,sql,sql-server,sql-server-2008,tsql,select,Sql,Sql Server,Sql Server 2008,Tsql,Select,我一直在找,但什么也没找到。我对SQL不是百分之百的熟悉,但我想做以下几点: SELECT TOP (SELECT COUNT (DISTINCT Name) FROM Logg WHERE Id= 1) * FROM Logg WHERE Id= 1 换句话说,我需要一个查询,它首先计算具有不同“名称”的行数,然后根据该计数选择前x行数 我将如何构造这样一个查询?只需将查询分为三个部分: DECLARE @cnt INT SELECT @cnt = COUNT (

我一直在找,但什么也没找到。我对SQL不是百分之百的熟悉,但我想做以下几点:

SELECT TOP (SELECT COUNT (DISTINCT Name) 
            FROM Logg WHERE Id= 1) 
* FROM Logg WHERE Id= 1
换句话说,我需要一个查询,它首先计算具有不同“名称”的行数,然后根据该计数选择前x行数


我将如何构造这样一个查询?

只需将查询分为三个部分:

DECLARE @cnt INT
SELECT @cnt = COUNT (DISTINCT TestNamn) FROM SelfTestLogg WHERE ApplikationId = 1
SELECT TOP (@cnt) * FROM SelfTestLogg WHERE ApplikationId = 1

是否尝试选择所有只出现一次的名称

如果是:

select name
from logg
where id = 1
group by name
having count(*) = 1;

您的查询不起作用-您只需指定一个列列表:

SELECT TOP (SELECT COUNT (DISTINCT Name) FROM Logg WHERE Id= 1) * -- Need to specify columns
FROM Logg WHERE Id= 1;

您能编辑您的问题并提供样本数据和期望的结果吗?您想要姓名的计数还是作为最高计数的姓名?是的,您好。对不起,我忘了,但我的查询中有。不知道为什么它不工作。对于列,您的查询在Sql2008+2012上工作-我已经更新了SQLFIDLE。您的筛选器
中的id=1
可能排除了数据?是的,这显然是一个局部问题。很抱歉占用您的时间。根据@Gordon的评论,您能粘贴一些样本数据吗?您需要的结果是什么?听起来您可能想要一个动态窗口函数或类似的函数(假设您想要一个更通用的解决方案,而不仅仅是通过同一个过滤器硬过滤计数行和#行)@user1531921需要顶部值作为表达式,而不是文本。
SELECT TOP 1 * FROM Logg WHERE Id= 1