Sql 如何在创建一个表的同时从每个表中提取总计?

Sql 如何在创建一个表的同时从每个表中提取总计?,sql,sql-server,Sql,Sql Server,在课堂上,我正在创建一个数据库来跟踪我的财务状况。我买的每种商品都有一张表。例如,租金,食品,卫生,娱乐,等等。。。我还有一个名为Register的表,我想显示每个项目的每月总额。表中总计的列名如下:monthlyenttotal,MonthlyFoodTotal,等等。。。 我希望Register表从每个表中提取总数,这样我就不必输入两次。有什么办法吗?我也不想创建视图。我想要一张真正的桌子。我甚至不确定这是否可能 只有在有充分理由的情况下,才应将项目分成单独的表格。对于你描述的项目,我看不出

在课堂上,我正在创建一个数据库来跟踪我的财务状况。我买的每种商品都有一张表。例如,
租金
食品
卫生
娱乐
,等等。。。我还有一个名为
Register
的表,我想显示每个项目的每月总额。表中总计的列名如下:
monthlyenttotal
MonthlyFoodTotal
,等等。。。
我希望
Register
表从每个表中提取总数,这样我就不必输入两次。有什么办法吗?我也不想创建视图。我想要一张真正的桌子。我甚至不确定这是否可能

只有在有充分理由的情况下,才应将项目分成单独的表格。对于你描述的项目,我看不出有什么令人信服的理由

我可以想象这样的数据结构:

  • itemcegories
    ——包含您关心的类别列表,如“食品”、“卫生”等
  • Purchases
    ——包含每次购买,包括
    purchaseDate
    location
    itemcegory
    description
    等列
您可能需要其他实体的附加表,例如“位置”


然后,您所调用的
注册
表将只是对
购买
的查询或视图

我假设租金、食品、卫生和娱乐具有相同的列类型

INSERT INTO Register
SELECT *
FROM
  (SELECT SUM(a.rent_value) AS value,
          'monthlyrent' AS TYPE
   FROM Rent a
   UNION SELECT SUM(b.food_value) AS value,
                'monthlyfood' AS TYPE
   FROM Food b) d pivot(max(value)
                        FOR TYPE IN (monthlyrent, monthlyfood)) piv;
数据被旋转以插入到寄存器表中

您可以将此查询放入存储过程中,也可以手动运行它。如果您想更新注册表中的数据,我建议:

  • 使用TRUNCATE for Register表和上述查询创建存储过程
  • 创建SQL作业并在需要时安排存储过程的运行

希望这有帮助。如果您需要更多详细信息,请告诉我。

为每种购买类型提供不同的表格似乎是这里的缺陷。您应该有一个带有类别/类型列的采购表。为每种类型的购买使用不同的表不会扩展,每次添加新类型时都需要对代码进行重大更改。租金,我可能会看到一个不同的表,取决于设计。除此之外,食品、卫生、娱乐都是实物购买,而租金是一种服务。因此,根据需求,您可能有两个服务和购买表;但没有足够的细节来了解。表格不会从其他表格中“提取”。查询可以做到这一点。我建议你退后一步,想想你的方法。这里应该考虑您的类(及其目的)——它是数据库设计吗?如果没有,您是否研究过db设计?您描述的内容可以完成,但需要代码,这不是一种典型的方法。也许你应该看看示例MS数据库,如AdventureWorks或World Wide Importers,以获得一些想法。我需要8个表,这是一个学期项目。这是我拥有这些桌子的唯一原因。@DanielJaeger。这是我能想到的将数据分解成表的最糟糕的原因之一。您需要为您的项目考虑更复杂的数据模型。