-1

私はデータを含むテーブルを持っています

役割の割り当て

RL1 CR1 LG1
RL2 CR2 LG2
RL3 CR3 LG3
RL4 CR4 LG4
RL5 CR5 LG1
RL6 CR6 LG1

契約の役割

CR1 Policy1
CR2 Policy1
CR3 Policy1
CR4 Policy1
CR5 Policy2
CR6 Policy2

そして、私はフェッチしたかっただけです

RL2
RL3
RL4

したがって、以下に書いたクエリは正常に機能していますが、うまく機能するとは思えません。ありがとう

SELECT 
    RL.ROLE_LOCATION_ID 
FROM 
    ROLELOCATION RL, contractrole CR
WHERE 
    CR.CONTRACT_ROLE_ID = RL.CONTRACT_ROLE_ID
    AND CR.CONTR_COMPONENT_ID = policy1
    AND RL.LOCATION_GROUP_ID NOT IN (SELECT RL2.LOCATION_GROUP_ID 
                                     FROM ROLELOCATION RL2,CONTRACTROLE CR2 
                                     WHERE RL2.CONTRACT_ROLE_ID = CR2.CONTRACT_ROLE_ID 
                                     AND CR2.CONTR_COMPONENT_ID <> policy1)
4

1 に答える 1

0

クエリを実行する方法は次のとおりです。

select role_location_id
from (SELECT RL.ROLE_LOCATION_ID,
             sum(case when cr.policy <> 'policy1' then 1 else 0 end) over (partition by rl.location_group_id) as NumNotPolicy1
      FROM ROLELOCATION RL join
           contractrole CR
           on CR.CONTRACT_ROLE_ID = RL.CONTRACT_ROLE_ID
     ) t
where NumNotPolicy1 = 0

これは、非ポリシー 1 がロケーション グループ レベルで表示される回数をカウントします。このカウントが 0 の行のみを選択します。

于 2013-03-27T15:26:04.457 に答える