SQL SERVER - 查找具有相同特征的组的成员

时间:2013-10-21 17:22:15

标签: sql-server-2008

我的数据代理,是群组的一部分。每个代理都可以在多个州获得许可。我正在尝试执行一个查询,该查询采用客户端状态并检查组中的每个代理是否在客户端状态中获得许可。

以下是示例数据:

CREATE TABLE GroupAgentState (
GroupID int,
AgentID int,
StateCd CHAR(2) )

INSERT INTO GroupAgentState VALUES
(1,100, 'OH'), 
(1, 100, 'NH'),
(1,100,'NY'),
(1, 101, 'OH'),
(1, 101, 'NY'),
(1, 102, 'NY')

我想检查一下,如果我有一个客户端状态(@ClientState)并且该客户端与一个组有关系,那么该组中的所有代理都是在客户端状态下获得许可的吗?

对于我的样本数据,我希望如果客户A与组1和@ClientState ='OH'有关系,那么返回值将为false。如果@ClientState ='NY',则返回值为true。

我对这个问题很感兴趣......

提前谢谢!

2 个答案:

答案 0 :(得分:0)

此查询显示未在客户端状态中注册的任何代理:

SELECT AgentID
FROM GroupAgentState gas1
WHERE GroupID =  @testGroup
  AND StateCd <> @ClientState
  AND NOT EXISTS( Select *
                  From GroupAgentState gas2
                  Where gas2.StateCd = @ClientState
                    And gas2.GroupID = gas1.GroupID
                    And gas2.AgentID = gas1.AgentID
                 )

答案 1 :(得分:0)

这对你来说可能是一个好的开始:

-- returns count of agents unlicensed in a particular state (@ClientState) by group
select
    gas.GroupId
    , sum( case when gas.AgentId is null then 1 else 0 end ) UnlicensedAgents
from
    Agent a
    left outer join GroupAgentState gas
     on a.AgentId = gas.AgentId
        and gas.StateCd = @ClientState
group by
    gas.GroupId