Tôi có bảng sau:Sql tổng tiến
CREATE TABLE tbl_proc(
[proc] float,
subscriber bigint
)
dữ liệu:
proc | subscriber
-----|-----------
0.7 | 123456
0.5 | 1234567
0.3 | 12345
0.3 | 45678
0.3 | 1234
0.2 | 123455
0.1 | 894562
Tôi muốn tìm một phương pháp tốt đẹp để thêm một cột mới vào bảng đại diện cho tổng các các giá trị trên.
Kết quả:
proc | subscriber | col3
-----|------------|------------
0.7 | 123456 | 0.7
0.5 | 1234567 | 1.2 -- 0.7 + proc
0.3 | 12345 | 1.5
...
tôi thấy phương pháp sau:
Select a.[proc],SUM(b.[proc])
from tbl_proc a, tbl_proc b
where a.[proc] <= b.[proc] and (a.[proc] <> b.[proc] or a.subscriber >= b.subscriber)
group by a.[proc],a.subscriber
order by a.[proc] desc
Trong bảng của tôi dữ liệu được sắp xếp desc bởi proc. Cột đăng ký cũng là duy nhất.
Phương pháp này tôi thấy hơi đắt một chút (bảng của tôi lớn). Do lý do hiệu suất, tôi không được coi là giải pháp giống con trỏ thứ.
Mọi đề xuất?
Cập nhật:
Tôi googled vấn đề hơn một chút và tôi thấy các "Update để một biến địa phương" giải pháp trên trang này:
As far như tôi đã thử nghiệm điều này chứng tỏ là giải pháp tốt nhất cho đến nay.
khai báo @runningTotal nổi = 0
CẬP NHẬT tbl_proc SET @RunningTotal = new_col = @RunningTotal + [proc] TỪ tbl_proc
Có lẽ bạn nên thử * * giải pháp con trỏ và so sánh kết quả, bạn có thể ngạc nhiên. Ngoài ra, bạn đã tìm kiếm giải pháp cho vấn đề của mình chưa? Tôi Googled "sql chạy tổng số" và tìm thấy một tải của câu trả lời. – Tony
@Martin Tôi đã sửa lỗi của mình. Sry –
Kiểu truy vấn này sẽ nhiều * nhiều *, dễ dàng hơn nhiều trong Denali do [cải tiến cho mệnh đề 'OVER'] (http://www.geniiius.com/blog/t-sql-enhancements-over-clause/) , nhưng đồng ý với những người khác rằng bạn cần thêm thuộc tính để xác định đơn đặt hàng. – onedaywhen