0

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

这是示例数据:

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',则返回值为真。

我在我头上这个...

提前致谢!

4

2 回答 2

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
                 )
于 2013-10-21T17:36:09.100 回答
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
于 2013-10-21T17:36:17.077 回答