我有以下MSSQL表:如何從一列這樣的記錄,有另一列與價值無關
Col1 Col2
A x
A y
A z
B x
B y
C x
C z
我想從Col1中所有的值,使得他們有沒有關聯的記錄與一個特定的值Col2
例如,我想要Col1的值,使'z'不會出現該值。答案應該是B
我有以下MSSQL表:如何從一列這樣的記錄,有另一列與價值無關
Col1 Col2
A x
A y
A z
B x
B y
C x
C z
我想從Col1中所有的值,使得他們有沒有關聯的記錄與一個特定的值Col2
例如,我想要Col1的值,使'z'不會出現該值。答案應該是B
您可以使用鮮爲人知的EXCEPT
關鍵字,像這樣:
SELECT Col1 FROM TableName
EXCEPT
SELECT Col1 FROM TableName WHERE col2 = 'z'
這裏你可以看到這一點 - >http://rextester.com/KPZMB79095
希望這有助於! !
select distinct col1
from [table]
where col1 not in (
select col1 from [table] where col2 = 'z'
);
雖然這可以回答這個問題,提供關於你的答案的一些解釋 –
有很多方法可以做到這一點。對我來說,最明顯的是使用EXCEPT
:
SELECT Col1 FROM MyTable
EXCEPT
SELECT Col1 FROM MyTable WHERE Col2 = 'z';
在這裏,我們明明白白地說,我們希望所有的Col1
值,但有一個z
進入這些Col1
值。 EXCEPT
將自動去重複結果。
試試這個我想你要檢索的值,其中給定的值不同時在列的存在:
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
一另一種方式:
select Col1
from your_table
group by Col1
having sum(case when Col2 = 'z' then 1 else 0 end) = 0
預期輸出 –
例如,我想要Col1中的所有值,使得'z'不會出現在該值上。答案應該是B – futurenext110
爲什麼不在上述條件下回答'A'? – Susang