我在sql server上遇到问题,一次从表中选择数据来运行外键成本汇总?
示例:我有一个表,例如
-----------------
| id | pid | Cost |
-----------------
| 1 | 1 | 5 |
| 2 | 1 | 4 |
| 3 | 1 | 3 |
| 4 | 2 | 1 |
| 5 | 2 | 3 |
| 6 | 2 | 4 |
| 7 | 2 | 5 |
| 8 | 3 | 6 |
| 9 | 3 | 7 |
| 10 | 1 | 3 |
| 11 | 1 | 2 |
-----------------
我想得到如下结果
------------------------
| id | pid | cost | sum |
------------------------
| 1 | 1 | 5 | 5 |
| 2 | 1 | 4 | 9 |
| 3 | 1 | 3 | 12 |
| 4 | 2 | 1 | 1 |
| 5 | 2 | 3 | 4 |
| 6 | 2 | 4 | 8 |
| 7 | 2 | 5 | 13 |
| 8 | 3 | 6 | 6 |
| 9 | 3 | 7 | 13 |
| 10 | 1 | 3 | 15 |
| 11 | 1 | 2 | 17 |
------------------------
在上表中,外键('pid')列在不同的行号中具有值1到3。我试图从每个'pid'字段名称中添加费用。我没有找到任何办法,
我能这样做吗?有人能帮我吗?我仍是sql server的新手
答案 0 :(得分:1)
这是一个完整的问题。您可以使用SUM OVER()
。
CREATE TABLE Temp(
id INT,
pid INT,
Cost INT
)
INSERT INTO Temp VALUES
(1, 1, 5), (2, 1, 4), (3, 1, 3),
(4, 2, 1), (5, 2, 3), (6, 2, 4),
(7, 2, 5), (8, 3, 6), (9, 3, 7),
(10, 1, 3), (11, 1, 2);
SELECT
*,
[Sum] = SUM(Cost) OVER(PARTITION BY pid ORDER BY Id)
FROM Temp
ORDER BY id, pid
DROP TABLE TEMP