2016-12-20 11 views
0

従業員が特定のusergruopのメンバーであり、 'contractor'という単語の一部であるかどうかを判断しようとしています。すべての従業員は複数のユーザグループに参加することができます。Select case文:1行のサブクエリが複数の行を返します

これは私のSelect Caseステートメントである:

SELECT CASE WHEN 
(SELECT usergroup FROM usergr 
WHERE usergroupnumber = (SELECT usergroupnumber FROM userlist 
WHERE username='Carl')) 
LIKE '%contractor%' THEN 1 
ELSE 0 
END FROM DUAL 

は、今ではカール以上1つのユーザーグループのメンバーであるため、1行以上を返すこのサブクエリです。 これらのユーザーグループの1つに「契約者」が含まれているかどうかを確認するにはどうすればよいですか。

更新日: 私はあなたにこれに関するいくつかの追加情報を提供させてください。

これは、文書管理プログラムで使用されます。このプログラムでは、すべての文書に添付された異なる属性を作成することができます。これらの属性では、select文に基づいて値を配置できます。たとえば、私はプロジェクト番号の値をさまざまなプロジェクトで作成されたドキュメントに追加する属性を作成しました。

上記の私の問題については、値0または1のいずれかを保持する属性が必要です。これは、ファイルを処理するときにユーザーがプログラムで特定のタスクを実行できるかどうかを制御します。

Example

私は「ほとんどの作品の上に書かれているSelect Caseステートメント。なぜなら、あなたが 'John'や 'Brian'で 'Carl'を変更すると、これらのメンバーはただ1人のユーザーグループのメンバーなので、正しい値が得られるからです。 しかし、 'Carl'や 'James'では、複数のユーザーグループの一部としてエラーが発生します。あなたが私を与えた '例' を使用している場合

は、私は次のような結果が欲しい:

  • 「ジョンの値は= 0
  • 'カール' の値は= 1
  • 'ジェームズ値=
  • 1 『ブライアン』の値= 0
+1

関連するテーブルとカラムの名前を教えてください。それをリバースエンジニアリングすることはできますが、私たちに伝えているだけではなく、もっと努力しています。 – mathguy

+0

['EXISTS'](https://www.techonthenet.com/oracle/exists.php)を使用してください。 –

答えて

0

は、私は、クエリが使用されるが、以下は、カールと呼ばれるユーザーがある1を返しますどのように100%わからないんだけど誰がユーザーグループの一員として「契約者」を持つグループに加入しているかを示します。それが本当にここに起こるすべての

SELECT 1 
FROM dual 
WHERE EXISTS (SELECT 1 
      FROM usergr ug 
       INNER JOIN userlist ul 
       ON ug.usergroupnumber = ul.usergroupnumber 
      WHERE ug.usergroup LIKE '%contractor%' 
      AND ul.username = 'Carl') 

はEXISTS句により、ユーザリストテーブルにusergrテーブルに参加するから、潜在的に複数の結果は、単純な真(1)/偽(ヌル)の結果に解決されていることです。

0

あなたのテーブルについて何かを推測しようとすると、あなたはこのような何かが必要な場合があります。あなたがDUALは必要ありませんが、あなたは、単に取得するcountの結果にいくつかのロジックを適用することができ

with userlist(username, usergroupnumber) as (
    select 'Carl', 1 from dual union all 
    select 'Carl', 2 from dual union all 
    select 'John', 2 from dual 
), 
usergr (usergroupnumber, usergroup) as (
    select 1, '__contractor__' from dual union all 
    select 2, 'XXXXXXXXXXXXXX' from dual union all 
    select 3, 'YYYYYYYYYYYYYY' from dual 
) 
SELECT case 
     when count(1) = 0 
      then 0 
     else 1 
     end 
FROM userlist ul 
     inner join usergr ug 
     on (ug.usergroupnumber = ul.usergroupnumber) 
WHERE ul.username='Carl' 
    and usergroup like '%contractor%' 

お知らせ"ブール値"(0/1)

関連する問題