アプリ版:「スタンプのみでお礼する」機能のリリースについて

SQL Oracle serverにって質問です。
会社テーブルがあり、そのテーブルから
社員名、給料、歩合などの列が存在します。
その中から、社員名、給料を表示し、さらに
給料×歩合したものを歩合込給料列として表示したいです。(歩合がnullの場合は給料を表示)
さらに、給与レベル(列見出しレベル)を給与の多い順に表示したいです。
給与レベル列に関しては、歩合込給料が20000より多ければAランク、9000より多くて20000以下なら
Bランク、3500より多くて9000以下ならCランク、それ以下はDランクと表示する場合
以下の写真の通りにやったら全てDランクになってしまいます。修正点を教えてください。

「SQL Oracle serverにって」の質問画像

質問者からの補足コメント

  • 写真では文字が見づらくてすいません。
    SELECT name,salary,NVL(salary * buai, salary)
    "歩合込給料", (CASE WHEN salary * buai > 20000 THEN 'Aランク' WHEN salary * buai <=
    20000 AND salary * buai > 9000 THEN 'Bランク' WHEN salary * buai <= 9000 AND salary * buai > 3500 THEN 'Cランク' ELSE 'Dランク' END
    ) レベル FROM co ORDER BY "歩合込給料" DESC

      補足日時:2022/05/21 13:15

A 回答 (4件)

外側のSELECT句で、"歩合込給料"を選択するのが漏れてました。



SELECT
name,salary,"歩合込給料",
(CASE

としてください。
    • good
    • 0

カテゴリがSQL Serverになっています。

RDBMSにより関数に違いがあるので、Oracleを選択するようにしてください。
    • good
    • 0

CASE式でのsalary*buaiは、NVL関数を使ってないのでbuaiがNULLの場合、結果もNULLになるのでELSEになります。


SELECT文を簡略化し、この問題にも対処しました。

SELECT
name,salary
,(CASE
WHEN "歩合込給料" > 20000 THEN 'Aランク'
WHEN "歩合込給料" > 9000 THEN 'Bランク'
WHEN "歩合込給料" > 3500 THEN 'Cランク'
ELSE 'Dランク'
END) レベル
FROM
(SELECT
name,salary
,NVL(salary * buai, salary) "歩合込給料"
FROM co) x
ORDER BY "歩合込給料" DESC
;
    • good
    • 0

写真では文字が判読不可能なので、その文章を補足として挙げられては?


私自身はORACLE未経験者ですけど、他の方が回答しやすくなるかもですし。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!