2015-11-03 42 views
-3

我有一個SQL表如下圖所示:查詢來獲取結果和不同的列值

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] 
4 abc2 2   10   s  ketan 
5 abc2 2   20   s  k!!etan 
6 abc3 3   30   c  roha###n 

有一個在我的表中的列categoryId。並有3個固定類別10,2030

而且我要像結果:

集團通過LIdType柱和記錄必須包含所有3類的ID(102030)在不同的行。

所以結果應該是:

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] 
+0

測試它,請這些文本文件的內容直接複製到這個問題,而不是附加的圖像。人們可能想要複製這些值。 – Tanner

+0

我所看到的只是您僅獲取abc1 ID行。一個where子句就是你所需要的。 –

+0

可以爲'LId'重複'CategoryId'嗎?喜歡:'CategoryId 10 10 20 30 30' for'LId abc1' –

回答

1

如果理解正確的話,你需要通過蓋子和類型,使組,後檢查如果類別編號有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

+1

謝謝........它幫助很多:) –

0

我想你需要的是這樣的:

select * from (
    select Id, LId, ModuleId, CategoryId, Type, Name 
    , ROW_NUMBER() over (Partition by CategoryId order by Id desc) numb 
    from YourTableName 
) temp 
where numb = 1 

這是我從你的問題的理解。