我在求和值时遇到问题...表显示如下:
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代码时,都会出现错误...
尝试使用子查询:
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,price
则客户表中的“ John”的for将为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
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句