2013-05-20 35 views
5
COL COL1 COL2 SUM cumm 
1 2 3 6 6 
4 5 6 15 21 
7 8 9 24 45 

Trong kết quả bảng trên, tôi cần giá trị cột cumm như thế này, cách thực hiện điều này với truy vấn, ai đó có thể trợ giúp?cách thêm giá trị dưới dạng giá trị cummulative trong cột riêng biệt?

+0

Để cho một số hoạt động có ý nghĩa, bạn cần một số cách để xác định những gì * để * các giá trị nên được bổ sung. Một trong các cột bạn đã hiển thị cột sẽ được sử dụng để xác định thứ tự của các hàng? Nếu không, bạn cần thêm cột. –

Trả lời

3

Hãy thử điều này một -

Query:

DECLARE @temp TABLE 
(
     Col1 INT 
    , Col2 INT 
    , Col3 INT 
    , Col4 INT 
) 

INSERT INTO @temp (Col1, Col2, Col3, Col4) 
VALUES 
    (1, 2, 3, 6), 
    (4, 5, 6, 15), 
    (7, 8, 9, 24) 

SELECT 
     Col1 
    , Col2 
    , Col3 
    , Col4 
    , SUM_cumm = SUM(Col4) OVER(
     ORDER BY Col4 
     ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) 
FROM @temp 

Output:

Col1  Col2  Col3  Col4  SUM_cumm 
----------- ----------- ----------- ----------- ----------- 
1   2   3   6   6 
4   5   6   15   21 
7   8   9   24   45 
+1

Bạn có hiển thị kết quả cho ** 'SQL SERVER 2012' ** không. Tôi nghĩ rằng OP cần giải pháp cho ** 'SQL SERVER 2008' ** – Luv

+0

@Luv, bạn nói đúng. – Devart

2

Bạn có thể sử dụng CTE

create table table1 
(
    COL int, 
    COL1 int, 
    COL2 int, 
    COL3 int 
) 
insert into table1 
(COL,COL1,COL2,COL3) 
values 
(1, 2, 3, 6), 
(4, 5, 6, 15), 
(7, 8, 9, 24) 

select 
rank() OVER (ORDER BY COL3) as [Rank], 
t1.COL, 
t1.COL1, 
t1.COL2, 
t1.COL3 
into #temp1 
from table1 t1 

;WITH x AS 
(
    SELECT 
     [Rank], 
     COL, 
     COL1, 
     COL2, 
     COL3, 
     Total=COL3 
    FROM #temp1 
    WHERE [Rank] = 1 
    UNION ALL 
    SELECT 
     y.[Rank], 
     y.COL, 
     y.COL1, 
     y.COL2, 
     y.COL3, 
     x.Total+(y.COL3) 
    FROM x INNER JOIN #temp1 AS y 
    ON y.[Rank] = x.[Rank] + 1 
) 
SELECT 
    COL, 
    COL1, 
    COL2, 
    COL3, 
    Total 
FROM x 
OPTION (MAXRECURSION 100); 

SQL FIDDLE

+0

+1. Cảm ơn bạn đã bình luận. – Devart

Các vấn đề liên quan