0

現在、WHERE 句でアプリケーションの複数行のデータを選択するクエリがあります。

SELECT
    APP_NAME,
    NAME,
    ROLE
FROM APP_PERSON
WHERE APP_NAME='ABCD'
ORDER BY APP_NAME,NAME

これは以下を返します:

 ABCD    Bob    Executive Director
 ABCD    Kim    Director
 ABCD    Sara   Associate Director
 ABCD    Tim    VP

私が望むのは、これが 1 つの行を返し、最も低いタイトルの人物が「役割」であることです。順序は次のとおりです: アソシエイト ディレクター、ディレクター、エグゼクティブ ディレクター、副社長 (これらは唯一のオプションです)。

したがって、上記の例では、返される唯一の行は次のとおりです。

ABCD   Sara   Associate Director

アソシエイト ディレクターがいなければ、ディレクターが欲しいです。これを行うクエリを作成するにはどうすればよいですか。私はある種の DECODE を想定していますが、どこに行けばよいかわかりませんでした。助けてくれてありがとう!

4

3 に答える 3

0

次のような一般的なテーブル式を使用するのはどうですか:

WITH cte AS (
  SELECT
    app_name
    ,name
    ,role
    ,MIN(CASE role
           WHEN 'Associate Director' THEN 1
           WHEN 'Director' THEN 2
           WHEN 'Executive Director' THEN 3 
           WHEN 'VP' THEN 4) AS role_level
  FROM app_person
  WHERE app_name='ABCD'
)
SELECT 
  r.*
FROM cte r
  INNER JOIN (
    SELECT 
      name
      ,MIN(role_level) AS role_level
    FROM cte rl
    GROUP BY name) ON r.name = rl.name AND r.role_level = rl.role_level
ORDER BY 
  r.app_name
  ,r.name
于 2013-04-16T14:11:18.143 に答える