2017-10-27 8 views
1

すべての所得欄に2500ドルのボーナスを追加したいとします。それを達成する方法、例えば、すべての行に数値を追加します。 SQLクエリ

Old table: 
id name  salary 
1 John  8000 
2 Labron 5000 
3 Elvis 6000 

New table: 
id name  salary SalaryWithBonus 
1 John  8000 10500 
2 Labron 5000 7500 
3 Elvis 6000 8500 

これにはPL/SQL関数を使用する必要がありますか?私はこの分野では新しいので、質問が愚かな種類の場合は迷惑をかけないでください。

+1

これはoracleですか?そのようなタグを付けてください。テーブルに新しい列を追加したいのですが、明確ではありませんか? – OldProgrammer

+0

はい追加された値 –

+1

2つのステートメントを持つ新しい列を追加したい:1)新しい列を追加するためにテーブルを変更し、2)それを満たすための更新。 – Igor

答えて

0

ここでは、これを行うための他の方法です。 YEAR列を持つBONUSという表があります。 月ごとにボーナスを保存することもできます。

CREATE TABLE OLD_TABLE 
(ID NUMBER, NAME VARCHAR2(12), SALARY DECIMAL(18,2)); 

INSERT INTO OLD_TABLE values(1,'John',8000); 
INSERT INTO OLD_TABLE values(2,'Labron',5000); 
INSERT INTO OLD_TABLE values(3,'Elvis',6000); 
INSERT INTO OLD_TABLE values(4,'Elvis2',NULL); 

Create Table BONUS 
(YEAR NUMBER, BONUS_AMT DECIMAL(18,2)); 

insert into BONUS VALUES('2016','2500'); 
insert into BONUS VALUES('2017','2500'); 

SELECT Id, Name, Salary, (NVL(salary,0) + BONUS_AMT) SalaryWithBonus FROM OLD_TABLE CROSS JOIN BONUS WHERE BONUS.YEAR = 2017 
+0

ありがとうございました。それを行うための新しいコンセプトを模索するのに役立ちました –

1

列を追加するには、次の給料は次の2つのオプションがありNULLであれば、以下の偉大なコメントで

UPDATE 
    table_name 
SET 
    SalaryWithBonus = salary + 2500; 

:フィールドを埋めるために

ALTER TABLE table_name 
    ADD SalaryWithBonus DECIMAL(12,2); 

を。

  1. NULLNULL給与とのそれらのためのボーナス給与を設定しないでください
  2. 0として扱います。

オプション1:

UPDATE 
    table_name 
SET 
    SalaryWithBonus = COALESCE(salary,0) + 2500; 

オプション2:

UPDATE 
    table_name 
SET 
    SalaryWithBonus = salary + 2500 
WHERE 
    salary IS NOT NULL; 
+1

nullを0にするために給与を合算する必要がありますので、2500を追加することができます。 '(給与、0)+ 2500のエッジケースのものを合体させる。給料の分野で 'int'についてはあまり確かではありません。 'decimal(12,2)'や何かが良いようです。あまりにも多くの人々が1年に90億以上を作るのではないでしょうか?多分 – xQbert

+0

真実、INTは、(実際の世界では)セントを含むことが多い給与を中心に、最良の例ではないかもしれません。あなたの2セントは間違いなく助けになりました! – kchason

+2

**ボーナスのみ**を保存する方が良いでしょう。 「salarywithbonus」は、2つの列から簡単に計算できます。 –

関連する問題