我在求和值时遇到问题...表显示如下:
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代码时,都会出现错误...
答案 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
中。