如何计算表中一个ID的值并将数据放入其他表SQL

时间:2018-06-20 10:54:42

标签: sql

我在求和值时遇到问题...表显示如下:

create table clients
    (
      id_c    INTEGER not null,
      name    VARCHAR2(20),
      age     INTEGER,
      address VARCHAR2(20),
      price number,
      Primary key (id_c)
    );

create table PRODUCTS
    (
      id_p              NUMBER not null,
      name_product      VARCHAR2(30),
      price             NUMBER,
      duration          NUMBER,
      primary key (id_p)
    );

create table TRANSACTIONS
    (
      id_t NUMBER not null,
      id_c NUMBER not null,
      id_p NUMBER not null,
      td_c NUMBER,
      primary key (ID_t),
      foreign key (ID_c) references CLIENTS (ID_c)
    );

现在,我想对每个客户(translations.id_c)的所有产品成本(translations.td_c)进行汇总,并将该值显示在价格行中。关键是要获取相同的客户端ID(ID_C),并汇总交易记录表中具有该ID_C的每一行,为该客户端总结每个td_c的值,然后将其放入表客户端的价格列中...不知道该怎么做,每次我尝试制作一些UPDATE代码时,都会出现错误...

1 个答案:

答案 0 :(得分:1)

尝试使用子查询:

UPDATE clients
       SET price = (SELECT sum(transactions.td_c)
                           FROM transactions
                           WHERE transactions.id_c = clients.id_c);

但是您的设计可能有问题。 clients.price完全取决于transactions,因此不应像这样实现。

如果transactions中有任何更改,我将立即不同步。例如,如果您在某客户“ John”的交易中插入新行,其td_c为+100,则在更新客户表之前,“ John”的price为100短再次。

考虑使用视图将price和客户数据连接在一起,请始终从price中选择当前的transactions。例如:

CREATE VIEW clients_with_price
AS
SELECT c.id_c,
       c.name,
       c.age,
       c.address,
       s.price
       FROM clients c
            LEFT JOIN (SELECT sum(t.td_c) price,
                              t.id_c
                              FROM transactions t
                              GROUP BY t.id_c) s
                      ON s.id_c = c_id.c;

然后将price列放在clients中。