2017-05-19 47 views
2

我有以下MSSQL表:如何從一列這樣的記錄,有另一列與價值無關

Col1 Col2 
A  x 
A  y 
A  z 
B  x 
B  y 
C  x 
C  z 

我想從Col1中所有的值,使得他們有沒有關聯的記錄與一個特定的值Col2

例如,我想要Col1的值,使'z'不會出現該值。答案應該是B

+1

預期輸出 –

+0

例如,我想要Col1中的所有值,使得'z'不會出現在該值上。答案應該是B – futurenext110

+0

爲什麼不在上述條件下回答'A'? – Susang

回答

2

您可以使用鮮爲人知的EXCEPT關鍵字,像這樣:

SELECT Col1 FROM TableName 
EXCEPT 
SELECT Col1 FROM TableName WHERE col2 = 'z' 

這裏你可以看到這一點 - >http://rextester.com/KPZMB79095

希望這有助於! !

0
select distinct col1 
    from [table] 
    where col1 not in (
        select col1 from [table] where col2 = 'z' 
        ); 
+0

雖然這可以回答這個問題,提供關於你的答案的一些解釋 –

0

有很多方法可以做到這一點。對我來說,最明顯的是使用EXCEPT

SELECT Col1 FROM MyTable 
EXCEPT 
SELECT Col1 FROM MyTable WHERE Col2 = 'z'; 

在這裏,我們明明白白地說,我們希望所有的Col1值,但有一個z進入這些Col1值。 EXCEPT將自動去重複結果。

0

試試這個我想你要檢索的值,其中給定的值不同時在列的存在:

create table #sample(Col1 char(1), Col2 char(1)) 
insert into #sample values 
('A',  'x'), 
('A',  'y'), 
('A',  'z'), 
('B',  'x'), 
('B',  'y'), 
('C',  'x'), 
('C',  'z') 

declare @search char(1) = 'z' 

select distinct col1 
from #sample 
where col1 not in (
select distinct Col1 
from #sample 
where (col1 = @search or col2 = @search)) 

OUTPUT:

col1 
B 
3

一另一種方式:

select Col1 
from your_table 
group by Col1 
having sum(case when Col2 = 'z' then 1 else 0 end) = 0 
相關問題