請問SQL語法 有關SUM的用法 |
答題得分者是:folkchen
|
XrayWang
一般會員 發表:3 回覆:5 積分:1 註冊:2003-12-11 發送簡訊給我 |
請問一下~
如果我有以下資料:
欄位名: NAME MONEY DATE
資料: AAA 100 20040701
BBB 200 20040701
DDD 800 20040701
DDD 300 20040701
AAA 200 20040701
BBB 400 20040701 CCC 400 20040702
EEE 300 20040702
CCC 500 20040702 今天我希望查詢某一天每個人(人名要排序)的money總合, 但是當天可能某幾個人沒資料(如上面20040701當天DDD和EEE並沒有資料),
例如20040701要列出:
NAME SUM(MONEY) DATE
AAA 300 20040701
BBB 600 20040701
CCC 0 20040701
DDD 1100 20040701
EEE 0 20040701 假若用Select NAME, SUM(MONEY) From TABLE Where DATE='20040701' Group by NAME Order By Name的話
只會出現AAA, BBB, DDD三者, 不知道怎麼讓出來的結果有A~E五組呢? 蠻急的..不行的話我只好用雙層迴圈對每個名字每個時間查總合了...謝謝各位囉!! 發表人 - XrayWang 於 2004/07/29 11:56:29
|
folkchen
高階會員 發表:9 回覆:232 積分:173 註冊:2003-10-09 發送簡訊給我 |
|
XrayWang
一般會員 發表:3 回覆:5 積分:1 註冊:2003-12-11 發送簡訊給我 |
|
folkchen
高階會員 發表:9 回覆:232 積分:173 註冊:2003-10-09 發送簡訊給我 |
Sorry~~ 我會錯意 以下SQL中的3個 20040701 你用變數串進SQL中就可以了 SELECT NAME, Sum(MONEY) AS Expr1, DATE1
FROM TT
WHERE DATE1='20040701'
GROUP BY NAME, DATE1
union
SELECT NAME, 0 AS Expr1, '20040701' as DATE1
FROM TT
WHERE DATE1<>'20040701'
GROUP BY NAME, DATE1
ORDER BY NAME;
|
XrayWang
一般會員 發表:3 回覆:5 積分:1 註冊:2003-12-11 發送簡訊給我 |
謝謝妳的大力幫忙呢~
不過我發現還是有問題唷~
假若20040701的資料多了一筆 CCC 200 20040701 (對不起,也算是我沒有講清楚)
您的方法出來應該會像是
AAA 300 20040701
BBB 600 20040701
CCC 0 20040701 --->此筆資料不該出現
CCC 200 20040701
DDD 1100 20040701
EEE 0 20040701
因為原本
select date='20040701'的部分會找到CCC 200 20040701
而在被union的部份WHERE DATE1<>'20040701'會找到CCC 0 20040701
兩個union起來就多出了後來這筆資料囉~~ 不過...由於妳的提示, 我剛剛用各種組合試了一下left join 和 right join
發現了right outer join可以找到資料囉:)
發現可以這樣解唷:
Select distinct NAME,sum(MONEY)
from myTABLE as A RIGHT OUTER JOIN myTABLE as B
On DATE = '20040701'
and A.NAME = B.NAME
and A.MONEY = B.MONEY --->這行也得加進去才行,其實不太了解為什麼
group by B.NAME
這樣就可以囉 謝謝囉:)
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |