
すみませんが、ご指導お願いします。
ACCESS97+ORACLEを用いまして、データベースを操作するのを作成しています。
うまくいかなく立ち止まってしまいました。
パススルークエリを使用し、SELECT文内部の1項目内にcase文を使用して、値をだしたいのですが。
内容ですが:
条件項目のところ:
(1)販売数が0のものは0とし
(2)日当数/在庫数が1以下のものは、1とし
(3)それ以外は、(日当数/在庫数)+0.9
上記の各それぞれでだされた値に「在庫数」をかける。
SELECT 商品コード,在庫数,販売数,販売数/稼動日 AS 日当数,(CASE WHEN 販売数=0 THEN 0 ELSE (日当数/在庫数) < 1 THEN 1 ELSE (日当数/在庫数)+0.9 END) END) * 在庫数
select文自体がcase文はできないのか、もし可能でしたら、自分の構文が何が悪いのか、ご指導お願い致します。
No.4ベストアンサー
- 回答日時:
Oracle8.0.xでは、case文は使えません。
Oracle8.1.xで、拡張された機能です。
古いオラクルでは、case文でなく、decode関数で
勝負します。
select
商品コード,
在庫数,
販売数,
販売数 / 稼働日 as 日当数,
decode(販売数,0,
decode(sign(販売数 / 稼働日 / 在庫数) - 1,-1,1,
販売数 / 稼働日 / 在庫数 + 0.9)) * 0.9
from hoge
;
ご回答ありがとうございます。
おかげさまで目的が果たせました。
今回はOracleについてもとても勉強になりました。
また、機会があればお願い致します。
No.3
- 回答日時:
>構文を確認してやってみました。
>確認後、CASE文のところに()を通常つけるのでしょうか?
サブクエリと違うので、()は不要です。
最初に書きましたが、Oracleのバージョンによって、
case文の取り扱いに差があります。
バージョンは何ですか?
FROMが無いといわれるのは、Oracleのバージョンの問題か
コーディングミス(カンマの過不足)のいずれかの可能性が
高いです。
この回答への補足
ご回答ありがとうございます。
ORACLEのバージョンですが、「Oracle 8 -Release 8.0.5.2.1-」になります。
現在、コーディング確認しておりますが、誤っているところはなさそうです。
お手数おかけしますが、お願い致します。
No.2
- 回答日時:
Oracle9iであれば、case文の使用に制限がありませんが、
8iでは、一部使えない場合があるので要注意です。
(ストアドでは使えない等)
基本的にCASE文の構文がおかしいと思いますが..
select
商品コード,
在庫数,
販売数,
販売数 / 稼働日 as 日当数,
case
when 販売数=0 then 0
when (販売数 / 稼働日 / 在庫数) < 1 then 1
else 販売数 / 稼働日 / 在庫数 + 0.9
end * 0.9
from hoge
;
ような感じになると思います。
この回答への補足
すみません。ありがとうございます。
構文を確認してやってみました。
確認後、CASE文のところに()を通常つけるのでしょうか?
SELECT 商品コード,~.....
(CASE
WHEN (A.最新当月販売予測数=0) THEN 0
WHEN (日当数/B.収容数) < 1 THEN 1
ELSE (日当数/B.収容数+0.9999) END * 0.9)
カッコをつけないと「FROM句が指定の位置にありません」のメッセージが出てしまいます。
つけると、「右カッコがありません」メッセージがでてどちらでも動作してくれません。何かほかの要因があるのでしょうか?
No.1
- 回答日時:
現状では、CASE文のネストの仕方がとりあえず違っているようです。
まず、
(CASE WHEN 販売数=0 THEN 0 ELSE・・・
のELSE以後で、もう一回CASEでやれば良いと思います。要するに、(1)の条件が満たなかったら、(2)と(3)の条件をもう一回、CASEで聞いてやる感じでしょうか。
Endなどの対応関係はお間違いなく・・・。
この回答への補足
考えなおしてみました。
実際ネスト無しでやってみたのですが、エラーが出てしまいます・・・。
例文で、
SELECT 商品コード,在庫数,販売数,販売数/稼動日 AS 日当数,(CASE WHEN 販売数=0 THEN 1 ELSE 2 END) AS 判定
でやっても「右カッコがありません」メッセージがでてしまうのですが、何が悪いのでしょう?
>Endなどの対応関係はお間違いなく・・・。
ネスト内部でもEnd句は必要なのですか?
考えなおしてみましたが・・。
*************************************************
SELECT 商品コード,在庫数,販売数,販売数/稼動日 AS 日当数,(CASE WHEN 販売数=0 THEN 0 ELSE (CASE WHEN日当数/在庫数) < 1 THEN 1 ELSE (日当数/在庫数)+0.9) END)END) * 在庫数
**************************************************
重ね重ねお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) VBAでの共有パスにつきまして 1 2023/03/04 17:24
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- その他(プログラミング・Web制作) Rでのスクリプトのご相談 3 2022/12/08 16:22
- スーパー・コンビニ 一斉値上 スーパーの食料品 値上や単価の仕組みは? 4 2022/06/01 16:18
- Excel(エクセル) マクロで最終行から上に検索を逆にしたい 1 2022/05/17 18:27
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- Visual Basic(VBA) VBAでのループ順序について 3 2023/03/13 10:55
- Visual Basic(VBA) VBAで質問があります 1 2022/10/19 10:32
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
うまくいきません教えてくださ...
-
SQLで漢字名称を都道府県や市区...
-
このSQLあってますか?教えてく...
-
更新クエリが実行できず、困っ...
-
現在庫算出方法についてお教え...
-
「テーブルに座って……」という...
-
SELECT 文の NULL列は?
-
一つ前に戻るには…
-
SQL、2つのテーブルで条件一致...
-
Accessでデータシートに同じデ...
-
sqlplusで表示が変なので、出力...
-
会社の飲み会の幹事になり、座...
-
SQLにて指定日付より前、かつ最...
-
update文で改行を入れる
-
SQLでUPSERTを一度に複数行やる...
-
SQL 複数テーブルのupdate
-
取数計算
-
データベースのインポートがで...
-
テーブルで一番古いレコードだ...
-
テーブル名をカラムとして取得...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SQLで漢字名称を都道府県や市区...
-
下記の問合せを行うクエリを、P...
-
このSQLあってますか?教えてく...
-
複数テーブルの結合結果を自分...
-
サブクエリを使用せずにLEFT JO...
-
SELECT文内での条件分岐
-
SQL CASE文に制御について
-
現在庫算出方法についてお教え...
-
SQLです。こんな感じですか?あ...
-
グループごとの最高得点者一覧...
-
うまくいきません教えてくださ...
-
降順で並び替えて昇順で受け取...
-
会社の飲み会の幹事になり、座...
-
「テーブルに座って……」という...
-
SQL、2つのテーブルで条件一致...
-
SQL*LoaderでCSVから指定した列...
-
SELECT 文の NULL列は?
-
Accessでデータシートに同じデ...
-
sqlplusで表示が変なので、出力...
-
update文で改行を入れる
おすすめ情報