在行sql server上使用相同的外键逐个添加摘要开销

时间:2015-01-29 00:50:38

标签: sql-server

我在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的新手

1 个答案:

答案 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