
すみませんが、ご指導お願いします。
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
棒読みちゃんが起動できないの...
-
バッチファイルで複数フォルダ...
-
Oracleで文字列型の時間を引き...
-
データベースのカラムの型がCHA...
-
orace SQL文のエラー(ORA-0092...
-
ORA-14452について
-
osqleditについて
-
MSDOS ソート sortf 使用方法
-
PL/SQLでフェッチでNULLの項目...
-
SQLの中上級者へのレベルアップ...
-
SQLで日付+時間で絞り込みたい
-
10営業日前の日付を取得したい...
-
オラクル12C_SQLPlusで実行す...
-
sqlで質問です。 Aテーブルは店...
-
SELECTによる表の変換方法を教...
-
開発対象となるアプリケーショ...
-
質問です。 下記のテーブルとデ...
-
Oracleですがsqlで質問です。 ...
-
sqlで質問です。 Aテーブルの登...
-
sqlで質問です。 Aテーブルの情...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SQLです。こんな感じですか?あ...
-
うまくいきません教えてくださ...
-
SQLで漢字名称を都道府県や市区...
-
このSQLあってますか?教えてく...
-
第4正規形について
-
SQL CASE文に制御について
-
Access 出荷管理簿を作りたい...
-
グループごとの最高得点者一覧...
-
下記の問合せを行うクエリを、P...
-
access結合クエリを編集可能に
-
下記の問合せを行うクエリを、P...
-
select文のサマリー
-
SELECT文内での条件分岐
-
ACCESS2010 SQL 結合キーにつ...
-
accessで在庫管理
-
相関サブクエリの中で、グルー...
-
update文におけるwhereとjoinの...
-
3つの表の外部結合
-
サブクエリを使用せずにLEFT JO...
-
「テーブルに座って……」という...
おすすめ情報