我倒是覺得樓主提出的需求「在a資料表中的aa的欄位放b資料表中所對應的某欄位數的加總」這樣子實作上雖然技術可行,但是會有「一旦b資料表的資料變更,就會發生aa欄位紀錄的值和b資料表實際的值不一致的問題」。
除非能夠確定b資料表永遠不會變更或者是為了作大量彙整計算工作,有效能上的議題,才去把SUM的值寫在a資料表中。
若只是做單純的頁面或報表SELECT,我會建議把SUM的工作寫成function,然後在SELECT裡去呼叫就可以了。這樣會比較有彈性。
假設一下
A資料表
id name
1 A
2 B
3 C
B資料表
id value
1 2
1 3
1 2
2 4
2 3
3 1
3 2
3 3
SELECT a.id, a.name, SUM(b.value) AS aa
FROM dbo.A as a cross JOIN
dbo.B as b
where a.id=b.id
GROUP BY a.id,a.name
這樣子不知道符不符合你的需求??
手頭上沒SQL Server,只有MySQL,但是也許可以參考一下.
<pre class="c" name="code">
CREATE TABLE it0815a (
id INT NOT NULL PRIMARY KEY,
name VARCHAR(5) NOT NULL,
sumb INT
);
CREATE TABLE it0815b (
id INT NOT NULL,
valuex INT NOT NULL
);
INSERT INTO it0815a(id,name) VALUES
(1,'A'), (2, 'B'), (3, 'C');
INSERT INTO it0815b VALUES
(1,2),(1,3),(1,2),(2,4),(2,3),(3,1),(3,2),(3,3);
---------------------------
UPDATE it0815a a
LEFT JOIN (SELECT id, sum(valuex) as sumx
FROM it0815b
GROUP BY id) b
ON a.id = b.id
SET a.sumb = b.sumx;
select * from it0815a;
+----+------+------+
| id | name | sumb |
+----+------+------+
| 1 | A | 7 |
| 2 | B | 7 |
| 3 | C | 6 |
+----+------+------+
在b資料表建立觸發程序
當b資料表有異動時SUM後直接更新a資料表的加總欄位
不要告訴我你不會寫觸發程序喔
真的不會的話就看一下書吧