我的表:
ID|Col1|Col2|
1 |abc |1 |
2 |abc |0 |
3 |xyz |0 |
4 |xyz |0 |
5 |jkl |1 |
Q1。我想返回按Col1分组的记录列表,其中该组中的所有记录都有Col2 = 0.我不介意它是否返回所有记录(记录3 4)或只是唯一的(例如'xyz')。
Q2。我还希望获得按Col1分组的记录列表,其中该组中的任何记录都有Col2 = 1(在本例中为'abc'和'jkl')< / p>
答案 0 :(得分:2)
select col1
from your_table
group by col1
having sum(case when col2 = 1 then 1 else 0 end) = 0
和
select col1
from your_table
group by col1
having sum(case when col2 = 1 then 1 else 0 end) > 0
答案 1 :(得分:1)
另一种方法,使用EXISTS和子查询:
select *
from your_table
where not exists (select * from your_table t2 where col1 = t2.col1 and col2 <> 0)
和
select *
from your_table
where exists (select * from your_table t2 where col1 = t2.col1 and col2 = 1)
答案 2 :(得分:0)
这可能有助于你
declare @t table(a char(1), b int)
insert into @t values ('a',0),('b',1),('a',0),('b',0)
第一次
select distinct * from @t
where a not in (select a from @t where b=1)
第二次
select distinct * from @t
where a in (select a from @t where b=1)
投票,如果它可以帮助你
答案 3 :(得分:0)
尝试条件聚合:
DECLARE @table TABLE(ID INT, Col1 VARCHAR(30), Col2 INT)
INSERT INTO @table VALUES
(1,'abc',1),
(2,'abc',0),
(3,'xyz',0),
(4,'xyz',0),
(5,'jkl',1)
SELECT Col1
FROM @table
GROUP BY Col1
HAVING SUM(CASE
WHEN Col2 = 0 THEN 1
ELSE 0
END) = COUNT(*)
SELECT Col1
FROM @table
GROUP BY Col1
HAVING SUM(CASE
WHEN Col2 = 1 THEN 1
ELSE 0
END) > 0
答案 4 :(得分:0)
你已经标记了另一个答案,但你甚至可以调整它,因为在这种特殊情况下你不需要有having子句的情况。实际上,当col2不是数字类型时,你需要一些案例,比如varchar
Select col1 from table
group by col1
having sum(col2)=0
Select col1 from table
group by col1
having sum(col2)>0