繁体   English   中英

SQL Server查询不同

[英]SQL Server query distinct

我正在尝试在SQL Server 2008中进行查询。这是我的表的结构

Recno     ClientNo      ServiceNo
---------------------------------
1234      17            27
2345      19            34
3456      20            33
4567      17            34

但是,我尝试选择RecNoRecNo不同的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM