[英]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.