お世話になります。
下記コードにて、抽出されたデータに不備があります。
「q2.新新品番(+) = A.品番」としていますが、
完全一致しない品番が見受けられ、trimを使ったら
良いのではと思うのですが、どこにtrimを入れたら
良いのか、又は考え方自体違うのか
現在テンパっている所でございます。
どなたか良いアドバイスを頂けたらと思い、
ご質問させて頂きました。
何卒、ご教示頂けます様、宜しくお願い致します。
記
select case
when substr(q2.新新品番,8,1)='_' then
substr(q2.新新品番,1,7)
else
q2.新新品番
end as 品番
,SUM(q2.新新合格数) AS 生産合格数
,A.伝票ID,A.品番,A.新入庫数量 as 区画入庫数,A.区画番号
from
(
select case
when substr(q1.新品番,6,1)='_' then
substr(q1.新品番,1,5)
else
q1.新品番
end as 新新品番
,SUM(q1.新合格数) AS 新新合格数
from
(
SELECT 更新日時,
case
when substr(ハンドル,7,1)='_' then
substr(ハンドル,1,6)
else
ハンドル
end as 新品番
,SUM(合格本数) AS 新合格数
FROM D最終検査履歴
WHERE 更新日時 BETWEEN '2012-5-31' and '2012-6-01'
group by 更新日時, case
when substr(ハンドル,7,1)='_' then
substr(ハンドル,1,6)
else
ハンドル
end
)q1
group by case
when substr(q1.新品番,6,1)='_' then
substr(q1.新品番,1,5)
else
q1.新品番
end
)q2 ,
(select 伝票ID,品番,sum(入庫数量)as 新入庫数量,区画番号
from D屋外入庫
where 登録日時 between '2012-5-31' and '2012-6-01' and 伝票ID='SN'
group by 伝票ID, 品番, 区画番号
)A
where q2.新新品番(+) = A.品番
group by case
when substr(q2.新新品番,8,1)='_' then
substr(q2.新新品番,1,7)
else
q2.新新品番
end, A.伝票ID, A.品番, A.新入庫数量, A.区画番号
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
こんにちは。
エラーの内容を詳しく知りたいです。
>where q2.新新品番(+) = A.品番」は、
>間違いでしょうか。
上記の結合条件であってるはずです。
No.2
- 回答日時:
>「q2.新新品番(+) = A.品番」としていますが、
>完全一致しない品番が見受けられ、trimを使ったら
>良いのではと思うのですが、どこにtrimを入れたら
ということなら、
trim(q2.新新品番(+)) = A.品番
でいいはずですが。
## 以下はよけいなお世話ですけど。
1.q1とq2を分けている理由が不明。
select case
when substr(q1.新品番,6,1)='_' then
substr(q1.新品番,1,5)
else
q1.新品番
end as 新新品番
,SUM(q1.新合格数) AS 新新合格数
from
(
SELECT 更新日時,
case
when substr(ハンドル,7,1)='_' then
substr(ハンドル,1,6)
else
ハンドル
end as 新品番
,SUM(合格本数) AS 新合格数
FROM D最終検査履歴
WHERE 更新日時 BETWEEN '2012-5-31' and '2012-6-01'
group by 更新日時, case
when substr(ハンドル,7,1)='_' then
substr(ハンドル,1,6)
else
ハンドル
end
)q1
group by case
when substr(q1.新品番,6,1)='_' then
substr(q1.新品番,1,5)
else
q1.新品番
end
)q2 ,
ならば、
(
SELECT 更新日時,
case
when substr(q1.ハンドル,6,1)='_' then
substr(q1.ハンドル,1,5)
when substr(ハンドル,7,1)='_' then
substr(ハンドル,1,6)
else
ハンドル
end as 新新品番
,SUM(合格本数) AS 新新合格数
FROM D最終検査履歴
WHERE 更新日時 BETWEEN '2012-5-31' and '2012-6-01'
group by 更新日時, case
when substr(q1.ハンドル,6,1)='_' then
substr(q1.ハンドル,1,5)
when substr(ハンドル,7,1)='_' then
substr(ハンドル,1,6)
else
ハンドル
end
)q2 ,
と同じに見えますが。
2.いまどきは(+)よりleft(またはright) outer joinのほうが一般的では?
(コーディング規約上(+)を使わないといけないとかある場合がまだまだ多いので、
一概には言えませんけど。)
・・・ q2 ,
(select 伝票ID,品番,sum(入庫数量)as 新入庫数量,区画番号
from D屋外入庫
where 登録日時 between '2012-5-31' and '2012-6-01' and 伝票ID='SN'
group by 伝票ID, 品番, 区画番号
)A
where q2.新新品番(+) = A.品番
は、
・・・ q2 right outer join
(select 伝票ID,品番,sum(入庫数量)as 新入庫数量,区画番号
from D屋外入庫
where 登録日時 between '2012-5-31' and '2012-6-01' and 伝票ID='SN'
group by 伝票ID, 品番, 区画番号
)A
on q2.新新品番 = A.品番
※trimつけるなら
on trim(q2.新新品番) = A.品番
3.なんか、
>完全一致しない品番が見受けられ
とある条件を正確に把握するのが先じゃないのかなと思ってしまいます。
8桁目に_なら、7桁目までで一致判定
6桁目に_なら、5桁目までで一致判定
ときて、次の_は7桁目に出て来そうな予感が・・・。
No.1
- 回答日時:
こんにちは。
>A.伝票ID,A.品番,A.新入庫数量 as 区画入庫数,A.区画番号
の部分にNullを置換する関数とtrim関数を追加し、上位の
select文を追加すればokです。
DBの種類が解らなかったので、Nullを置換する関数とtrim関数
の名前が違っていたら修正してください。
select *
from(
select case
when substr(q2.新新品番,8,1)='_' then
substr(q2.新新品番,1,7)
else
q2.新新品番
end as 品番
,SUM(q2.新新合格数) AS 生産合格数
,trim(nvl(A.伝票ID,'')),trim(nvl(A.品番,'')),trim(nvl(A.新入庫数量,0)) as 区画入庫数,trim(nvl(A.区画番号,''))
from
(
select case
when substr(q1.新品番,6,1)='_' then
substr(q1.新品番,1,5)
else
q1.新品番
end as 新新品番
,SUM(q1.新合格数) AS 新新合格数
from
(
SELECT 更新日時,
case
when substr(ハンドル,7,1)='_' then
substr(ハンドル,1,6)
else
ハンドル
end as 新品番
,SUM(合格本数) AS 新合格数
FROM D最終検査履歴
WHERE 更新日時 BETWEEN '2012-5-31' and '2012-6-01'
group by 更新日時, case
when substr(ハンドル,7,1)='_' then
substr(ハンドル,1,6)
else
ハンドル
end
)q1
group by case
when substr(q1.新品番,6,1)='_' then
substr(q1.新品番,1,5)
else
q1.新品番
end
)q2 ,
(select 伝票ID,品番,sum(入庫数量)as 新入庫数量,区画番号
from D屋外入庫
where 登録日時 between '2012-5-31' and '2012-6-01' and 伝票ID='SN'
group by 伝票ID, 品番, 区画番号
)A
where q2.新新品番(+) = A.品番
)NES
group by case
when substr(NES.新新品番,8,1)='_' then
substr(NES.新新品番,1,7)
else
NES.新新品番
end,NES.伝票ID,NES.品番,NES.新入庫数量,NES.区画番号
ご回答頂きありがとうございます。
しかしora00904のエラーが出てしまい
うまくいきませんでした。
今思いましたが、
「where q2.新新品番(+) = A.品番」は、
間違いでしょうか。
「where 品番(+) = A.品番」こうすべき
でしょうか。
今自宅なので試せませんが・・。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- その他(プログラミング・Web制作) Rでのスクリプトのご相談 3 2022/12/08 16:22
- Visual Basic(VBA) VBAで最新のデータを別シートに転記する方法をお教えください。 3 2022/04/07 19:20
- Excel(エクセル) 製品番号での整列と、検索に関して 3 2023/06/28 19:20
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- Visual Basic(VBA) EXCEL関数LOOKUPとFILTERについての質問です 1 2022/12/21 05:53
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) 先ほど、回答者様によって教えていただいたのですがどうしたらいいか分かりません。 ユーザーフォーム上に 2 2023/02/21 22:25
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
GROUP BYを行った後に結合した...
-
SET句内で複数の条件を指定して...
-
マテビューのNOTNULL設定について
-
写真のsql文空白をハイフン表示...
-
再起SQL が無限ループします。
-
unionでマージした副問合せを結合
-
Accessで別テーブルの値をフォ...
-
エクスプローラーで「2つの条件...
-
Oracleでの文字列連結サイズの上限
-
Accessのクエリでフィールドの...
-
DataGridViewの内容をDBに反映...
-
access 自動採番 年が変わる...
-
Accessでのレコード存在チェック
-
[VBA] ADOの Clone と AddNew
-
Excelの横軸の際の抽出について
-
ACCESS VBA レコードセットの参...
-
日本語の表名、列名の利用について
-
ADO VBA 実行時エラー3021
-
JSPのNULLレコード表示について...
-
困っています。ORACLE_SQL 複数...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
GROUP BYを行った後に結合した...
-
select句副問い合わせ 値の個...
-
select insertで複数テーブルか...
-
SELECTの結果で同一行を複数回...
-
MERGE文を単体テーブルに対して...
-
固定値を含む結合と複数テーブ...
-
複数テーブルのMAX値の行データ...
-
他のテーブルを参照した値はupd...
-
unionの結果は集計はできないで...
-
外部結合とor条件混在の記述方法
-
oracleの分割delete
-
SET句内で複数の条件を指定して...
-
SQL GROUPで件数の一番多いレコ...
-
DELETE 文とEXISTSの使い方につ...
-
COUNTの取得方法(?)について...
-
集計後の数値が倍になる
-
SQLの書き方(チェックボックス)
-
unionでマージした副問合せを結合
-
副問い合わせのinsert文
-
結合と副問い合わせの違い
おすすめ情報