SQL初心者で仕事でSQL文を考えています。
どのようにすればいいのかよくわからないので教えてください。
現在、商品マスタと価格テーブルがあります。
(商品マスタ)
商品コード 商品名
0001 商品A
0002 商品B
0003 商品C
0004 商品D
(価格テーブル)
商品コード 価格 登録日
0001 100円 11/1
0001 110円 11/2
0002 200円 11/1
0002 190円 11/2
0001 105円 11/3
それぞれの商品(商品コード)には毎日価格を登録するようになっています。
今日が11/3である場合、商品コード=0001、商品Aは登録がされていますが
その他の商品は登録されていない状況です。
碌このような状況で「今日の価格は全商品登録されているか」
ということをSQLでチェックすることはできるのでしょうか。
2回のSQLに分けて個数を比較するが普通ですか。
たとえば、
(1)select count from 商品マスタ
(2)select count from 価格 where sysdate = 登録日
(1)-(2)が0でないのですべて登録できていないと判断する。
複雑すぎてよくわかりません。
よろしくおねがいします。
No.3ベストアンサー
- 回答日時:
select case when count(*) > 0 then '1つでも登録されていない' else 'すべて登録済み' end 登録状況
from (
select a.SHOHIN_CODE
from T_SHOHIN a
where not exists (
select *
from T_KAKAKU b
where a.SHOHIN_CODE = b.SHOHIN_CODE
and b.KIJUN_DATE = 20111104));
でどうでしょうか。
このようなやりかたがあるんですね
どうしてそう書くのかを調べました。
どこから評価されるのか疑問でした。
勉強になりました。
ありがとうございます。
No.4
- 回答日時:
(蛇足)
CASE
WHEN TO_CHAR(B.KAKAKU) IS NOT NULL THEN '登録なし'
ELSE TO_CHAR(B.KAKAKU)
END as 登録価格
これは逆ですね。
CASE
WHEN B.KAKAKU IS NOT NULL THEN TO_CHAR(B.KAKAKU)
ELSE '登録なし'
END as 登録価格
No.2
- 回答日時:
これでどうでしょう。
(オラクル環境がなく確認していません。)
----
SELECT
CASE WHEN COUNT(C.NG) > 0 THEN '未入力あり' ELSE '全登録' END as 登録状況
FROM
(SELECT
0 as NG
FROM 商品マスタ A
LEFT JOIN
(SELECT
商品コード
,価格
FROM 価格テーブル
WHERE 登録日 = '11/3'
) B
ON A.商品コード = B.商品コード
WHERE B.価格 IsNull ) C
GROUP BY C.NG
返信が遅れました。
申し訳ありません。
皆様のおかげで解決できました。
ありがとうございます。
まだまだ勉強不足です。
がんばります。
No.1
- 回答日時:
商品マスタと価格テーブルの登録日抽出分を結合すればできます。
---
SELECT
A.商品コード
,A.商品名
,CASE WHEN B.価格 IsNull THEN '登録なし' ELSE B.価格 END as 登録価格
FROM 商品マスタ A
LEFT JOIN
(SELECT
商品コード
,価格
FROM 価格テーブル
WHERE 登録日 = '11/3'
) B
ON A.商品コード = B.商品コード
この回答への補足
補足です
以下の部分を
CASE WHEN B.KAKAKU IS NOT NULL THEN '登録なし' ELSE B.KAKAKU END as 登録価格
CASE
WHEN TO_CHAR(B.KAKAKU) IS NOT NULL THEN '登録なし'
ELSE TO_CHAR(B.KAKAKU)
END as 登録価格
としたらできました。
結果マスタレコード分抽出されました。
実際には、個別の結果ではなく全体として
「すべて登録済みか、1つでも登録されていないか」
ということを知りたいのです。
質問内容が良くなかったです。
すみません。
o_chi_chiさん
早速の回答ありがとうございます。
こういう方法があるのですね。
もう1つ質問させてください。
教えてもらったSQL文を実行してみたところ
「ORA-00932: データ型が一致しません: CHARが予想されましたがNUMBERです。」
となってしまいました。
型は合っていると思うのですが誤りがありますか。
何度も質問してすみません。
(実行したSQL)
SELECT
A.SHOHIN_CODE
,A.SHOHIN_NAME
,CASE WHEN B.KAKAKU IS NOT NULL THEN '登録なし' ELSE B.KAKAKU END as 登録価格
FROM T_SHOHIN A
LEFT JOIN
(SELECT
SHOHIN_CODE
,KAKAKU
FROM T_KAKAKU
WHERE KIJUN_DATE = 20111104
) B
ON A.SHOHIN_CODE = B.SHOHIN_CODE
KAKAKU:NUMBER型
KIJUN_DATE:NUMBER型
SHOHIN_CODE:VARCHAR2型
SHOHIN_NAME:VARCHAR2型
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 経営情報システム accessでの請求管理について 12 2022/06/11 16:20
- Visual Basic(VBA) EXCEL関数LOOKUPとFILTERについての質問です 1 2022/12/21 05:53
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- その他(買い物・ショッピング) JANコードの登録について 1 2022/07/23 14:19
- PostgreSQL PostgreSQL レコードからアイテム種類数を取得したい 2 2022/11/23 22:31
- 知的財産権 【至急】商標登録の区分がわからず困っています。 3 2023/02/21 12:11
- 簿記検定・漢字検定・秘書検定 簿記2級 売上原価の計算と期末商品の評価に関する質問 3 2023/06/24 23:50
- 憲法・法令通則 商標登録の指定商品とは?例えばナイキは、いちいち新しい商品を出す度に商標登録するのですか?ならばまだ 1 2022/09/02 13:47
- 国産バイク 大型バイク カワサキz900rsに付ける ヨシムラのマフラーの質問です、 【 商 品 I D 】14 2 2023/06/27 13:43
- Visual Basic(VBA) VBAで最新のデータを別シートに転記する方法をお教えください。 3 2022/04/07 19:20
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQLServer 日付が直前のレコー...
-
平成20年 春期 基本情報技術者 ...
-
Access終了時の最適化が失敗?
-
GROUP BYを行った後に結合した...
-
Oracleでの文字列連結サイズの上限
-
Accessで別テーブルの値をフォ...
-
カレントレコードが無い事を判...
-
ファイル書込みで一行もしくは...
-
SQL文で右から1文字だけ削除す...
-
【MYSQL】asでリネームしてwher...
-
SELECTで1件のみ取得するには?
-
MERGE文を単体テーブルに対して...
-
Access 文字+年ごとの自動採番
-
[VBA] ADOの Clone と AddNew
-
SQLの書き方(チェックボックス)
-
access 自動採番 年が変わる...
-
実績累計の求め方と意味を教え...
-
select句副問い合わせ 値の個...
-
SQLについて質問です。 AVG関数...
-
sum()の出力結果順に並び替えを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Access終了時の最適化が失敗?
-
CREATE テーブルでの複数外部...
-
沿線コード
-
10営業日前の日付を取得したい...
-
Order by句でバインド変数を使...
-
ヤマト急便のチェックデジット...
-
同一コード毎に最新の名称を取...
-
SQLに関して
-
【SQL】登録されているかを比較...
-
SELECT文で
-
オラクル 名称をコードに変換
-
SQLの抽出条件の記述の仕方につ...
-
一度のSQL発行で結果を得るには...
-
ACCESSで、コード基本のお勧め...
-
SQLにて縦を横へ展開
-
SQLの集約の方法
-
SQLで<>を使用するとき、
-
基本情報技術者の試験について
-
ストアドプロシージャーの引数...
-
SQL GROUP BY
おすすめ情報