SQL Server groupby两列
我有一张这种结构的表格:SQL Server groupby两列,sql,sql-server,group-by,Sql,Sql Server,Group By,我有一张这种结构的表格: ID TaskID ResourceID IsActive --- ----- ---------- -------- 1 51 101 1 2 52 101 1 3 53 101 1 4 51 102 0 5 52 102
ID TaskID ResourceID IsActive
--- ----- ---------- --------
1 51 101 1
2 52 101 1
3 53 101 1
4 51 102 0
5 52 102 0
6 53 102 0
7 51 103 1
8 52 103 0
9 53 103 1
我想获取所有记录中IsActive
列为0的资源。在本例中,我希望得到ResourceID-102作为结果,因为它的IsActive
列都是0
我试着做:
select ResourceID
from TableName
where ResourceID <> (SELECT ResourceID
from TableName
group by ResourceID, IsActive
having IsActive = 1)
此外,我认为我的问题很简单,切中要害,而不是“可能的重复”。未来的读者可能会发现这个问题比建议的重复问题更容易理解。用户更可能通过“SQL Server groupby two columns”来搜索此问题,而不是“SQL:选择没有任何列具有特定值的行的ID”
或者
或者
只要没有其他具有相同资源ID的行具有IsActive=1,则返回一行:
select ResourceID
from TableName t1
where not exists (select 1 from TableName t2
where t1.ResourceID = t2.ResourceID
and t2.IsActive = 1)
您可能希望执行
选择distinct ResourceID
以删除重复项。只要没有其他具有相同ResourceID的行的IsActive=1,就返回一行:
select ResourceID
from TableName t1
where not exists (select 1 from TableName t2
where t1.ResourceID = t2.ResourceID
and t2.IsActive = 1)
select ResourceID
from TableName
where ResourceID not in (SELECT ResourceID
from TableName
group by ResourceID, IsActive
having IsActive = 1)
也许您想执行
选择distinct ResourceID
以删除重复项。如何按ResourceID分组,使MAX(IsActive)=0
为什么不使示例数据更复杂,添加ResourceID 103,同时包含0和1。(那么空的呢?@jarlh。你说得对。我忘记加了。将立即更新。可能是@TabAlleman的副本。请阅读我的上一篇编辑:)关于groupbyresourceid的MAX(IsActive)=0的情况如何
为什么不让示例数据更复杂,添加resourceid103,同时包含0和1。(那么空的呢?@jarlh。你说得对。我忘记加了。将立即更新。可能是@TabAlleman的副本。请阅读我的上一次编辑:)在“不存在”子选择中没有引用外部表?是的,刚刚捕获到它。感谢您没有在“不存在”子选择中引用外部表?是的,刚刚捕获到它。谢谢你解决了我的问题。谢谢,伙计:)解决了我的问题。谢谢,伙计:)
select ResourceID
from TableName
where ResourceID not in (SELECT ResourceID
from TableName
group by ResourceID, IsActive
having IsActive = 1)
select ResourceID
from TableName
where ResourceID not in (SELECT ResourceID
from TableName
group by ResourceID, IsActive
having IsActive = 1)
select ResourceID
from TableName
group by ResourceID
having max(IsActive) = 0