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

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

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

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

Q&A

解決済

1回答

1067閲覧

SqlServer CASEなどサブクエリを使ったSELECT文

asmer

総合スコア3

SQL Server

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

0グッド

0クリップ

投稿2023/01/18 01:37

編集2023/01/18 03:03

前提

SqlServer CASEなどサブクエリを使ったSELECT文の作成途中で
疑問に思ったので質問します。

実現したいこと

テーブル A
kbn | no | cd
1 | aa | 10
1 | ab | 20
2 | ab | 20

テーブルB
kbn | no | bunrui | syouhin
1 | aa | 100 | 1111
1 | aa | 120 | 1010
2 | ab | 100 | 2222

このようなAとBのテーブルがあります。

①まず、Aのkbnとnoをとりだして(後にAとBで結合させる)
SELECT A.kbn + A.no AS bangou

②次にBのsyouhinを取り出します。ここでの条件はB.bunruiが100であることです。
,CASE WHEN B.bunrui = '100' THEN B.syouhin END AS syouhin1
とします。

③最後に、AとBを結合します。(省略)

ここで取り出したいものは、
1aa | 1111
2ab | 2222
であるのに、

CASEを使ったことで、
(CASE WHEN B.bunrui = '100' THEN B.syouhin END AS syouhin1)
bunruiが100でないものはnullになってしまって、
1aa | 1111
1aa | null
2ab | 2222
2ab | null
のようになってしまいます。

SELECT内でCASEやSELECTなどサブクエリを使って処理したいです。

SELECTを使って、
( SELECT syouhin FROM B WHERE bunrui = 100 )AS syouhin1
とするとサブクエリは複数の値を返しました、とエラーが出てしまいます。

いままでは
SEELCT
・・・
,B1.syouhin AS syouhin1
,B2 syouhin AS syouhin2
FROM A
LEFT OUTER JOIN B1
ON A.kbn = B1.kbn
AND A.no = B1.no
AND bunrui = '100'
LEFT OUTER JOIN B2
ON A.kbn = B2.kbn
AND A.no = B2.no
AND bunrui = '120'

という感じで、結合の際に場合分けをしていたのですが、
処理速度の関係でサブクエリを使いたいと考えています。
SELECT内で処理を書くことは可能でしょうか。
教えていただけると嬉しいです。
宜しくお願い致します。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2023/01/18 02:49

質問欄は後からでも編集できるので、上の追加情報は質問欄を編集して追記してください。ここコメント欄はもともと質問への情報の追加を依頼する場所で、初期画面では開いてないので見ない人も多々います。
asmer

2023/01/18 03:04

かしこまりました。ありがとうございます。
guest

回答1

0

ベストアンサー

select A.kbn+A.no, ( SELECT syouhin FROM B WHERE bunrui = 100 and B.kbn=A.kbn and B.no=A.no )AS syouhin1 from B
とか。
1ab|null が出る気がするし、あんまし早い気もしないけど。今のコードとやらを見るとなんか他の条件が隠れそうな気もする。inner joinをunion allしたかったとか。

投稿2023/01/23 16:45

matukeso

総合スコア1590

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問