如果理解正確的話,你需要通過蓋子和類型,使組,後檢查如果類別編號有3個值。在這種情況下,你可以在下面使用COUNT() OVER()
:
QUERY
select Id, LId, ModuleId, CategoryId, Type, Name
from (
select Id, LId, ModuleId, CategoryId, Type, Name
,count(*) over (partition by LId, Type) cnt
from #t
) t
where cnt = 3
樣本數據
create table #t
(
Id INT,
LId NVARCHAR(60),
ModuleId INT,
CategoryId INT,
Type NVARCHAR(60),
Name NVARCHAR(60)
)
insert into #t values
(1,'abc1',1,10,'c','arun'),
(2,'abc1',1,20,'c','a!!run'),
(3,'abc1',1,30,'c','[email protected]'),
(4,'abc2',2,10,'s','ketan'),
(5,'abc2',2,20,'s','k!!etan'),
(6,'abc3',3,30,'c','roha###n')
輸出
Id LId ModuleId CategoryId Type Name
1 abc1 1 10 c arun
2 abc1 1 20 c a!!run
3 abc1 1 30 c [email protected]
UPDATE
如果可以爲同一組等於CategoryId
,例如:
Id LId ModuleId CategoryId Type Name
1 abc1 1 10 c arun
2 abc1 1 20 c a!!run
3 abc1 1 20 c [email protected]
4 abc2 2 30 s ketan
5 abc2 2 30 s k!!etan
6 abc3 3 30 c roha###n
你能做到在以下幾點:
select Id, LId, ModuleId, CategoryId, Type, Name
from (
select *,
count(*) over (partition by LId, Type) cnt2
from (
select Id, LId, ModuleId, CategoryId, Type, Name
, count(*) over (partition by LId, Type) cnt
, count(*) over (partition by LId, Type,CategoryId) rnk
from #t
) t
where cnt = 3 and rnk = 1
)x
where cnt2 = 3
隨着溶液上方將返回組只有在所有3 CategoryId
不同。
DEMO
您可以在SQL FIDDLE
測試它,請這些文本文件的內容直接複製到這個問題,而不是附加的圖像。人們可能想要複製這些值。 – Tanner
我所看到的只是您僅獲取abc1 ID行。一個where子句就是你所需要的。 –
可以爲'LId'重複'CategoryId'嗎?喜歡:'CategoryId 10 10 20 30 30' for'LId abc1' –