1

これら両方の SQL ステートメントを組み合わせたビューを作成する必要があります。

SELECT g.state_cd, g.state_name, 
    case when s.ROLE_ID = 110 then 'Yes' else 'No' end  POC
    FROM us_state g
    LEFT OUTER JOIN role s ON g.state_cd = s.OFC_STATE_CD
    and s.role_id = 110 


    SELECT g.state_cd, g.state_name, 
    case when s.ROLE_ID = 120 then 'Yes' else 'No' end  ADM
    FROM us_state g
    LEFT OUTER JOIN role s ON g.state_cd = s.OFC_STATE_CD
    and s.role_id = 120 

例えば。

ユーザーには複数の行があります。一部のユーザーは役割 = 110 を持ち、一部のユーザーは役割 = 120 を持ち、一部のユーザーは両方の組み合わせを持ちます。これらの両方を組み合わせた 1 つの SQL ステートメントを作成することは可能ですか。結果は次のようになります。

MD Maryland Yes No
NY Newyork No Yes
NJ Newhersey Yes Yes

上記の表は、次のことを意味します。

MD user has only role of 110
NY user has only the role of 120
NJ user has both roles.

何が必要で、それが理にかなっているのかが明確であることを願っています。

以下のように組み合わせてみました。

SELECT g.state_cd, g.state_name, 
case when s.ROLE_ID = 110 then 'Yes' else 'No' end  POC,
case when s.ROLE_ID = 120 then 'Yes' else 'No' end  ADM
FROM us_state g
LEFT OUTER JOIN role s ON g.state_cd = s.OFC_STATE_CD
and s.role_id in (110, 120)

しかし、これは機能せず、重複した行が返されます。ここで何が欠けているのかわかりません。誰かが助けてくれれば幸いです。

ありがとう

ハリッシュ

4

2 に答える 2

3

結果を集計する必要があります。

SELECT g.state_cd, g.state_name, 
       max(case when s.ROLE_ID = 110 then 'Yes' else 'No' end) as POC,
       max(case when s.ROLE_ID = 120 then 'Yes' else 'No' end) as ADM
FROM us_state g LEFT OUTER JOIN
     role s ON g.state_cd = s.OFC_STATE_CD and s.role_id in (110, 120)
group by g.state_cd, g.state_name

「はい」と「いいえ」が MAX でうまく機能することがわかりました。

于 2012-09-05T19:17:54.667 に答える
2

これもバリエーションです。

select state_cd, state_name
       ,case when (select count(*) from role r1 
               where r1.ofc_state_cd = s.state_cd 
                 and r1.role_id = 110) > 0 then 'YES' else 'NO' 
         end as POC
       ,case when (select count(*) from role r2 
               where r2.ofc_state_cd = s.state_cd
                 and r2.role_id = 120) > 0 then 'YES' else 'NO' 
         end as ADM
from us_state s;

http://sqlfiddle.com/#!4/161e7/8

于 2012-09-05T19:36:44.970 に答える