【问题标题】:SQL create a computed column from another columnSQL 从另一列创建计算列
【发布时间】:2020-11-28 13:38:14
【问题描述】:

我正在尝试创建一个计算列,其中值来自另一个表。该表必须存储在数据库中。

名为 TABLE 1 的现有表

ID  GROUP ITEM_NO COST_A COST_B
1   1     1001    20.00  30.00
2   1     1002    10.00  25.00
3   2     1005    15.00  25.00

在名为表 2 的新表中,我希望有以下内容。 本质上,GROUP_TOTALCOST 是每个组的 COST_A 加上 COST_B

Code GROUP(FK) GROUP_TOTALCOST
001  1         85.00
002  2         40.00

这是我可以在 ALTER TABLE ADD COLUMN 或 CREATE TABLE 语句中实现的吗? 谢谢

【问题讨论】:

  • 您使用的是哪个 DBMS?
  • 无论如何答案是否定的!你不能从另一个表计算列,你可能想创建一个视图来实现这一点
  • @eshirvana 谢谢。如果考虑所有选项,如果我希望 GROUP_TOTALCOST 列在表 1 发生更改时以某种方式自动更新,我该怎么办?每次费用变化时我都需要更新吗?
  • 查看是这种情况下的首选方式。如果您必须以任何方式使用表,您可以在表 1 中使用触发器,这将更新表 2 中的值

标签: sql sql-server


【解决方案1】:

创建一个视图以获取动态计算的值:

CREATE VIEW <NAME> AS 
SELECT [GROUP],SUM(COST_A + COST_B) FROM TABLE1 GROUP BY [GROUP]

或者将结果保存在一个表中 - 但如果您的原始表发生更改,您将不得不重新创建它:

CREATE TABLE <NAME> AS 
SELECT [GROUP],SUM(COST_A+COST_B) FROM TABLE1 GROUP BY [GROUP]

在这两种情况下,您都将使用SELECT * FROM &lt;NAME&gt; 来获取您的数据。

【讨论】:

    【解决方案2】:

    你不能有一个基于另一个表的计算列,你可以创建一个视图,每当你从视图中选择它是最新的

    如果您使用的是 sql server,这里是您可能需要考虑的语法

    create view yourviewname
    as 
    select 
    ROW_NUMBER() over (order by GROUP) as rownumber ,  GROUP, sum(Cost_A) + sum( COst_B) as GROUP_TOTALCOST
    from testx
    group by GROUP
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-08
      • 2013-05-04
      • 1970-01-01
      • 2023-03-17
      • 2020-01-25
      • 2019-12-25
      • 2018-12-16
      相关资源
      最近更新 更多