2015-10-26 134 views
1

我有一個包含id,type的表。選擇記錄中只有特定值的所有行

我希望選擇只具有一個或多個記錄的相同類型的ID。

例如,

假設這是我的表:

id type 
456  4 
123  4 
123  4 
123 18 
123  4 
789  4 
789  4 
000  7 

我想IDS:456789原因而IDS只有類型= 4的記錄:

456有一個創紀錄,並且789具有兩個類型= 4的記錄。

123具有類型= 4,但具有類型= 18。

我該怎麼辦?

我知道我可以使用分區,但我想是加入/存在..

http://sqlfiddle.com/#!9/731e1

+1

所以,你要選擇那裏並沒有'用相同的ID,但不同類型的exist'另一行的所有行?嗯,我不知道你怎麼可以這樣做... –

回答

4

您可以使用:

SELECT id 
FROM cards 
GROUP BY id 
HAVING MIN(type) = MAX(type) 

Demo here

+1

哇,我正在考慮與存在的子查詢,但這..遠遠好得多。 –

+0

它不SQL服務器上運行,但它只是對sqlFiddle: SELECT ID,類型,狀態 從銀行卡 GROUP BY ID HAVING MIN(類型)= MAX(型)和類型= 4 –

+0

你爲什麼添加'HAVING'子句中的'type = 4'? –

3
Select Id 
FROM cards 
GROUP BY Id 
HAVING COUNT(DISTINCT [type]) = 1 
+1

我喜歡這個,因爲它可以很容易地被修改來查找只有兩個或最多兩種類型的Ids。 – trincot

0

我不要以爲@ M.Ali回答你的標準。他的結果集包括ID =「000」

if OBJECT_ID('Tempdb..#Work') is not null 
    drop table #Work; 
Create Table #Work (Id char(3), [Type] int) 
insert into #Work values 
('456', 4) 
, ('123', 4) 
, ('123', 4) 
, ('123', 18) 
, ('123', 4) 
, ('789', 4) 
, ('789', 4) 
, ('000', 7) 

select distinct * 
from #Work a 
where exists (
       select Type 
        ,Count(Distinct Id) cntId 
       from #Work b 
       where a.Type = b.Type 
       group by Type 
       having Count(Distinct Id) > 1 
      ) 
and exists (
     select Id 
      ,count(distinct Type) 
     from #Work c 
     where a.Id = c.Id 
     group by id 
     having count(distinct type)= 1 
    ) 

輸出:

Id Type 
---- ----------- 
456 4 
789 4 
相關問題