2013-10-21 37 views
0

我的數據代理是組的一部分。每個代理可以以多種狀態許可。我正在嘗試執行一個查詢,該查詢採用客戶端狀態並檢查組中的每個代理程序是否在客戶端狀態下獲得許可。SQL SERVER - 查找具有相同特徵的組的成員

這裏是樣本數據:

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'有關係,那麼返回值將是錯誤的。如果@ClientState ='NY',那麼返回值將爲true。

我在我頭上的這一個...

在此先感謝!

+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 
       ) 
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 
+0

感謝莫霍 - 我正在考慮走上重要路線,但我希望有一個更迷人的解決方案... – user2904136

相關問題