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' の場合、戻り値は true になります。

私はこれに頭がいっぱいです...

前もって感謝します!

4

2 に答える 2

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 に答える
0

このクエリは、Client State に登録されていないエージェントを表示します。

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 に答える