プロが教える店舗&オフィスのセキュリティ対策術

SQLでデータを1件だけ取得したいのですが。

以下のようなテーブルが2つあるとします。
------------------------------------
テーブルA     テーブルB
  値X           値X    値Y
  1           1    20
  2           2    NULL
  3           2    60
  4           2    70
              4    NULL
              4    NULL
------------------------------------

ここで、テーブルAの値Xと、テーブルBの値Xをリンクさせます。
テーブルAにデータがあれば、テーブルBに無くても出力します(外部結合イメージ)

テーブルAの値Xに対して、テーブルBの値Xは2件以上リンクされる可能性があります。
この場合は1件のみ出力します。
その1件の決め方は、テーブルBの値YがNULLでは無く最大の物です。
但し値Yは全てNULLの可能性もあるので、その場合NULLとして1件出力します。

上記の出力イメージ
------------------------------------
 値X    値Y
 1    20  (1件の場合そのまま出力。1件がNULLでもそのまま出力)
 2    70  (NULLではない最大の1件を出力)
 3    NULL  (テーブルBになくても出力)
 4    NULL  (値が全てNULLの場合、NULLとして1件出力)
------------------------------------

どのようなSQLを記載すれば実現可能でしょうか?

A 回答 (2件)

select テーブルA.x


,( select b.y from ( select テーブルB.x, テーブルB.y, row_number() over( partition by テーブルB.x order by テーブルB.y desc nulls last ) rn from テーブルB ) b
where テーブルA.x = b.x and b.rn = 1 ) y
from テーブルA;
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます。解決する事ができました。

お礼日時:2010/09/29 17:48

こんばんは。



実際に試してはいませんが、
こんな感じでいかがでしょうか。

SELECT
テーブルA.X,
テーブルB'.Y
FROM
テーブルA
LEFT OUTER JOIN
(SELECT
MAX(Y) Y
FROM
テーブルB
GROUP BY
X
) テーブルB'
ON
テーブルA.X = テーブルB'.X
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。解決する事ができました。

お礼日時:2010/09/29 17:48

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す