[英]How to add n number of columns to an existing table,the new columns should have the aggregate of an existing column
我有一張像這樣的桌子:
ID NAME SALARY
1 JOSE 100
2 KEVI 100
3 JAMS 200
4 SANJ 400
我需要獲得如下輸出:
ID NAME SALARY SALARY-1 SALARY-2 SALARY-3 SALARY-4
1 JOSE 100 99 98 97 96
2 KEVI 100 99 98 97 96
3 JAMS 200 199 198 197 196
4 SANJ 400 399 398 397 396
如何獲得所需的桌子?
如果只需要輸出,則使用查詢:
select id, name, salary, salary-1, salary-2, salary-3, salary-4
from table t;
如果您確實想將這些列添加到表中,則可以使用alter table add column
,然后更新值。
使用此存儲過程可獲得結果。 這對我有用。 請根據您的數據庫更改表名和列名。
DELIMITER $$
DROP PROCEDURE IF EXISTS my_proc$$
CREATE PROCEDURE my_proc(n INT)
proc : BEGIN
SET @q = CONCAT('SELECT ID, NAME, SALARY');
SET @num = 1;
select_loop : LOOP
SET @q = CONCAT(@q, ', SALARY - ',@num);
IF n = 0 THEN
LEAVE select_loop;
END IF;
SET n = n - 1;
SET @num = @num + 1;
END LOOP;
SET @q = CONCAT(@q, ' FROM sal');
PREPARE stmt FROM @q;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END$$
DELIMITER ;
使用您想要在輸出中顯示的薪水列數調用存儲過程
mysql> CALL my_proc(4);
+----+------+--------+------------+------------+------------+------------+------------+
| ID | NAME | SALARY | SALARY - 1 | SALARY - 2 | SALARY - 3 | SALARY - 4 | SALARY - 5 |
+----+------+--------+------------+------------+------------+------------+------------+
| 1 | jose | 100 | 99 | 98 | 97 | 96 | 95 |
| 2 | kevi | 100 | 99 | 98 | 97 | 96 | 95 |
| 3 | jams | 200 | 199 | 198 | 197 | 196 | 195 |
| 4 | sanj | 400 | 399 | 398 | 397 | 396 | 395 |
+----+------+--------+------------+------------+------------+------------+------------+
4 rows in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.