我有一个表,该表可以保存每月值,也可以保存整个年份的值。每当我插入一个月的值时,是否可以将其添加到年度值中?
我想避免先加载该值,然后将其添加到服务器代码中,然后再次写入。
答案 0 :(得分:1)
您的最佳方法是避免表中的冗余数据。当您需要年份总计时,请选择它们。
您没有告诉我们您的表定义,所以我会猜测。表months
包含
year int (for example, 2019)
month int (1-12)
value number
您可以通过以下明显的方式来获取详细信息:`
SELECT year, month, value FROM months;
您可以通过这种方式获取详细信息和年度总计
SELECT year, month, SUM(value) value
FROM months
GROUP BY year, month WITH ROLLUP;
此查询的结果集看起来与其他结果集相似,但也包含总和。看起来像这样:
| year | month | value |
| ---- | ----- | ----- |
| 2018 | 1 | 100 | detail month values...
| 2018 | 2 | 140 |
| 2018 | 3 | 130 |
| 2018 | 4 | 190 |
| 2018 | 5 | 120 |
| 2018 | 6 | 180 |
| 2018 | 7 | 130 |
| 2018 | 8 | 140 |
| 2018 | 9 | 150 |
| 2018 | 10 | 200 |
| 2018 | 11 | 230 |
| 2018 | 12 | 300 |
| 2018 | | 2010 | yearly sum for 2018 (month is NULL)
| 2019 | 1 | 100 |
| 2019 | 2 | 130 |
| 2019 | 3 | 160 |
| 2019 | 4 | 140 |
| 2019 | 5 | 190 |
| 2019 | 6 | 240 |
| 2019 | | 960 | yearly sum for 2019 (month is NULL)
| | | 2970 | total sum (both month and year are NULL)
为什么这是个好过程?
答案 1 :(得分:0)
当在Month表中插入任何值时,您可以编写触发器并在Years表中插入值
CREATE TRIGGER tr_month ON monthly_table
AFTER INSERT
AS
BEGIN
UPDATE year_table
SET // insert your values here
FROM inserted
WHERE monthly.id = inserted.id; // something like that, I am not sure about your structure thats why cannot add exact syntax
END
GO
答案 2 :(得分:0)
只需添加客户端值即可解决此问题,这也节省了服务器上的计算时间。