
前提
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内で処理を書くことは可能でしょうか。
教えていただけると嬉しいです。
宜しくお願い致します。
回答1件
あなたの回答
tips
プレビュー