質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Q&A

解決済

1回答

177閲覧

SQLSERVERでinner joinを使ったときの条件分岐

morinokuma0621

総合スコア81

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

0グッド

0クリップ

投稿2023/10/25 09:06

実現したいこと

テーブルXとYがあって、各項目が次のようになっています。

テーブルX N A 1 2 テーブルY M B C D 1 6 0 2 1 7 2 2 1 8 1 2 2 9 0 0

そこで、次のようなselect文を作りました。

SQLSERVER

1select A * B from X inner join Y on X.N = Y.M

2つのテーブルを結合させて、NとMが一致するBの数字を取得し、
Aと掛け合わせた数字を拾いたいのですが、
Bの数字については、項目Cが一番大きい数字のものだけを
取得したいと考えています。
つまり、2×6や2×8ではなく2×7にしたいと思っています。

また、その一番大きい数字については項目Dに格納されているので、
ここから取得してくることもできます。

これをSQLで実現するためには、どういう構文を書けば良いでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

実現方法はいろいろあると思いますが、たとえばEXISTSを利用する方法があります。

SQL

1SELECT X.A * Y1.B 2FROM X 3INNER JOIN Y Y1 ON X.N = Y1.M 4WHERE NOT EXISTS ( 5 SELECT * 6 FROM Y Y2 7 WHERE Y1.M = Y2.M 8 AND Y1.C < Y2.C 9);

個人的にはROW_NUMBERを利用するほうが好みです。

SQL

1SELECT A * B 2FROM ( 3 SELECT X.A, Y.B, ROW_NUMBER() OVER (PARTITION BY Y.M ORDER BY Y.C DESC) RN 4 FROM X 5 INNER JOIN Y ON X.N = Y.M 6) T 7WHERE RN = 1;

投稿2023/10/25 09:32

neko_the_shadow

総合スコア2273

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

morinokuma0621

2023/10/26 01:30

ご返答ありがとうございます、試してみます!
morinokuma0621

2023/10/26 02:13

ありがとうございます、思っていた通りのことができるようになりました。 NOT EXISTSでこういう使い方ができるの、初めて知りました。 大変勉強になりました、ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問