繁体   English   中英

如何将n个列添加到现有表中,新列应具有现有列的聚合

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM