全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:5377
推到 Plurk!
推到 Facebook!

MS-SQL 語法,是否能做出累計效果

尚未結案
deemster04
一般會員


發表:9
回覆:5
積分:2
註冊:2005-03-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2010-03-23 14:50:46 IP:218.210.xxx.xxx 訂閱
各位大大

請問一下,在Oracle中,可以使用Over ... Partition 的方式,產生 欄位累計的效果

在MS-SQL中,有沒有類似的方法可以做到呢?
pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2010-03-23 15:42:08 IP:60.248.xxx.xxx 未訂閱
您好

在sql-2000以前並無直接語法,我是用以下方式達到,看看適不適合您的情況?

[code sql]
declare @temp table(dd char(2),amt int)
insert @temp
select '01',20
union
select '02',10
union
select '03',40
union
select '01',5


SELECT a1.dd, a1.amt, sum(a2.amt) progamt
FROM
(select dd,sum(amt) amt from @temp group by dd) a1,
(select dd,sum(amt) amt from @temp group by dd) a2
WHERE a1.dd >= a2.dd
group by a1.dd, a1.amt
order by a1.dd

[/code]

deemster04
一般會員


發表:9
回覆:5
積分:2
註冊:2005-03-09

發送簡訊給我
#3 引用回覆 回覆 發表時間:2010-03-24 09:47:09 IP:218.210.xxx.xxx 訂閱
感謝pedro大大的回復

剛剛看了一下您的答復,是能解決累計的問題.不過由于必須要將很多欄位同時都列出來

所以可能沒有辦法利用這樣的語法完成.不過也謝謝大大,讓我多學了一招.


===================引 用 pedro 文 章===================
您好

在sql-2000以前並無直接語法,我是用以下方式達到,看看適不適合您的情況?

[code sql]
declare @temp table(dd char(2),amt int)
insert @temp
? select '01',20
? union
? select '02',10
? union
? select '03',40
? union
? select '01',5


SELECT a1.dd, a1.amt, sum(a2.amt) progamt
FROM
? (select dd,sum(amt) amt from @temp group by dd) a1,
? (select dd,sum(amt) amt from @temp group by dd) a2
WHERE a1.dd >= a2.dd
group by a1.dd, a1.amt
order by a1.dd

[/code]
?
eaglewolf
資深會員


發表:4
回覆:268
積分:429
註冊:2006-07-06

發送簡訊給我
#4 引用回覆 回覆 發表時間:2010-03-26 16:18:52 IP:211.75.xxx.xxx 未訂閱
多一層join 不行嗎?

select TableA .* , TableB.amt, TableB.progamt From TableA Join
(
SELECT a1.dd, a1.amt, sum(a2.amt) progamt
FROM
(select dd,sum(amt) amt from @temp group by dd) a1,
(select dd,sum(amt) amt from @temp group by dd) a2
WHERE a1.dd >= a2.dd
group by a1.dd, a1.amt

) TABLEB
on TableA.dd = TABLEB.dd
Order By TableA.dd

===================引 用 deemster04 文 章===================
感謝pedro大大的回復

剛剛看了一下您的答復,是能解決累計的問題.不過由于必須要將很多欄位同時都列出來

所以可能沒有辦法利用這樣的語法完成.不過也謝謝大大,讓我多學了一招.


===================引 用 pedro 文 章===================
您好

在sql-2000以前並無直接語法,我是用以下方式達到,看看適不適合您的情況?

[code sql]
declare @temp table(dd char(2),amt int)
insert @temp
? select '01',20
? union
? select '02',10
? union
? select '03',40
? union
? select '01',5


SELECT a1.dd, a1.amt, sum(a2.amt) progamt
FROM
? (select dd,sum(amt) amt from @temp group by dd) a1,
? (select dd,sum(amt) amt from @temp group by dd) a2
WHERE a1.dd >= a2.dd
group by a1.dd, a1.amt
order by a1.dd

[/code]
?
------
先查HELP
再查GOOGLE
最後才發問

沒人有義務替你解答問題
在標題或文章中標明很急
並不會增加網友回答速度

Developing Tool:
1.Delphi 6
2.Visual Studio 2005
3.Visual Studio 2008
DBMS:
MS-SQL
系統時間:2024-04-25 8:50:35
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!