[英]SQL Server query distinct
我正在尝试在SQL Server 2008中进行查询。这是我的表的结构
Recno ClientNo ServiceNo
---------------------------------
1234 17 27
2345 19 34
3456 20 33
4567 17 34
但是,我尝试选择RecNo
, RecNo
不同的ClientNo
过滤,因此对于某些客户端(例如17号客户端)-它们具有1个以上的条目,我尝试仅对该客户端进行一次计数。 所以基本上,看这张表,我只应该看到3个RecNo,因为只有3个不同的客户。 请帮忙
Select RecNo, Count(ClientNo)
from TblA
where Count(clientNo)<2
像这样吗
编辑:
RecNo
的值RecNo
,我只需要有准确的记录数即可。 在这种情况下,我想要3条记录。
橡木桶您会得到一些疯狂的答案,可能是因为您所期望的结果不清楚,因此,我建议您澄清其中所期望的结果是否不是您所需要的。
如果您想要答案3,我只能假设您想要一个DISTINCT ClientNo的计数,如果这样的话,它只是聚合。
SELECT COUNT(DISTINCT ClientNo) as ClientNoDistinctCount
FROM
TblA
GROUP BY
ClientNo
好的,这将为您提供所需的计数:
WITH CTE AS
(
SELECT *,
RN = ROW_NUMBER() OVER(PARTITION BY ClientNo ORDER BY Recno)
FROM TblA
)
SELECT COUNT(DISTINCT Recno) N
FROM CTE
WHERE RN = 1;
尝试这个..
;with cte1
As(SELECT Recno,clientno
,row_number() over(partition by clientno order by Recno )RNO FROM TblA)
Select Recno,clientno
From cre1 where RNO=1
仅选择具有最大Recno
ClientNo
(或将<
替换为>
以选择最小的ClientNo
)。
Select *
from TblA t1
where not exists(select 1
from TblA t2
where t1.ClientNo = t2.ClientNo and t1.Recno < t2.Recno )
BTW,已经提到的另一个解决方案,在这种情况下,利用row_number()
不需要CTE
SELECT TOP(1) WITH TIES *
FROM TblA
ORDER BY ROW_NUMBER() OVER(PARTITION BY ClientNo ORDER BY Recno)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.