請教SQL語法~日統計及週統計 |
尚未結案
|
seedbcc
高階會員 發表:232 回覆:272 積分:105 註冊:2003-12-10 發送簡訊給我 |
我的資料庫是ORACLE及access 若有個TABLE內如下: REC MDATE amOUNT
序號 日期 數量
1 1/1 AM1:00 5
2 1/1 am1:00 2
3 1/2 am3:00 1
4 1/3 pm5:00 5
5 1/5 am3:00 1
6 1/5 pm4:00 1
我要如何用 SQL 語法 ,做日統計
也就是若有數筆同一天 數筆另一天 數其它天 ,如上述資料 能統計成
1 1/1 7
2 1/2 1
3 1/3 5
4 1/5 2
可以用sql語法做到這樣子嗎 另外 還有週統計,資料table如上述
(ps:我可以自訂 週的統計範圍 為 本週三到下週二 視為同一週嗎)
(這些統計 方式 可以用 sql語法做到嗎
|
James
高階會員 發表:10 回覆:290 積分:220 註冊:2002-07-25 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
|
seedbcc
高階會員 發表:232 回覆:272 積分:105 註冊:2003-12-10 發送簡訊給我 |
|
Fishman
尊榮會員 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
HI SEEDBCC, SORRY !! 有點筆誤,修正一下,順便回覆季統計的問題 IN ORACLE :
1. 日統計 SELECT TRUNC(MDATE) DT, SUM(AMOUNT) FROM YOURTABLE GROUP BY TRUNC(MDATE) 2.週統計 SELECT TO_CHAR(MDATE - (NVL(:P,0)-1),'IYYY/IW') WK, SUM(AMOUNT) FROM YOURTABLE GROUP BY TO_CHAR(MDATE - (NVL(:P,0)-1),'IYYY/IW') 其中 :P 為參數,決定你要統計範圍起始星期?(0~6,分別表星期日、星期一?星期二‧‧‧) 若是要以系統日自動分,可將 :P 用 TO_NUMBER(TO_CHAR(:P,'D') - 1) 替換掉即可 3.月統計 SELECT TO_CHAR(MDATE,'YYYY/MM') MO, SUM(AMOUNT) FROM YOURTABLE GROUP BY TO_CHAR(MDATE,'YYYY/MM') 3.季統計 SELECT TO_CHAR(MDATE,'YYYY') '/Q' TO_CHAR(MDATE,'Q') QT, SUM(AMOUNT) FROM YOURTABLE GROUP BY TO_CHAR(MDATE,'YYYY') '/Q' TO_CHAR(MDATE,'Q') 4.年統計 SELECT TO_CHAR(MDATE,'YYYY') YR, SUM(AMOUNT) FROM YOURTABLE GROUP BY TO_CHAR(MDATE,'YYYY')發表人 -
------
Fishman |
seedbcc
高階會員 發表:232 回覆:272 積分:105 註冊:2003-12-10 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
|
seedbcc
高階會員 發表:232 回覆:272 積分:105 註冊:2003-12-10 發送簡訊給我 |
|
Fishman
尊榮會員 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
Hi seedbcc, 基本用法同上述週的應用方法,先加減一個基礎數字,再做型別轉換來達到目的
1. SELECT TO_CHAR(MDATE - (NVL(:P,0)-1),'YYYY/MM'), SUM(AMOUNT) FROM YOURTABLE GROUP BY TO_CHAR(MDATE - (NVL(:P,0)-1),'YYYY/MM') 2. SELECT TO_CHAR(MDATE - (TO_NUMBER(TO_CHAR((NVL(:P,TRUNC(SYSDATE,'YEAR'))),'DDD')) - 1),'YYYY/Q'), SUM(AMOUNT) FROM YOURTABLE GROUP BY TO_CHAR(MDATE - (TO_NUMBER(TO_CHAR((NVL(:P,TRUNC(SYSDATE,'YEAR'))),'DDD')) - 1),'YYYY/Q')---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman |
seedbcc
高階會員 發表:232 回覆:272 積分:105 註冊:2003-12-10 發送簡訊給我 |
|
Fishman
尊榮會員 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
|
seedbcc
高階會員 發表:232 回覆:272 積分:105 註冊:2003-12-10 發送簡訊給我 |
SELECT TO_CHAR(MDATE,'YYYY') '/Q' TO_CHAR(MDATE,'Q') QT,
SUM(AMOUNT)
FROM YOURTABLE
GROUP BY
TO_CHAR(MDATE,'YYYY') '/Q' TO_CHAR(MDATE,'Q') 會出現下述bug
inconsistent datatypes:expected NUMBER got DATE 另外請教的是
您的季 統計語法 是不同年的同一季相加嗎
我的結果是要像如此
2004/3-5
2004/6-8
2004/9-11
2004/12-2005/2
2005/3-5
2005/6-8 其中 2004/3-5 跟 2005/3-5是分開的 ,而不做相加 發表人 - seedbcc 於 2005/06/21 11:28:09
|
seedbcc
高階會員 發表:232 回覆:272 積分:105 註冊:2003-12-10 發送簡訊給我 |
|
seedbcc
高階會員 發表:232 回覆:272 積分:105 註冊:2003-12-10 發送簡訊給我 |
|
Fishman
尊榮會員 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
Hi seedbcc,
SELECT TO_CHAR(ADD_MONTHS(DT,(NVL(:P - 1,0))* -1),'YYYY/Q') QT, TO_CHAR(MIN(DT),'YYYY/MM') || '~' || TO_CHAR(MAX(DT),'YYYY/MM') RANGE, SUM(CNT) FROM AAA GROUP BY TO_CHAR(ADD_MONTHS(DT,(NVL(:P - 1,0))* -1),'YYYY/Q')其中 :P 即為起始月份 :P=1結果 :P=2結果 PS : 測試資料區間 2003/01/01~2005/12/31 ---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman |
seedbcc
高階會員 發表:232 回覆:272 積分:105 註冊:2003-12-10 發送簡訊給我 |
|
Fishman
尊榮會員 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
Hi seedbcc,
SELECT TO_CHAR(ADD_MONTHS(DT,(NVL(:P - 1,0))* -1),'YYYY') YR, TO_CHAR(MIN(DT),'YYYY/MM') || '~' || TO_CHAR(MAX(DT),'YYYY/MM') RANGE, SUM(CNT) FROM AAA GROUP BY TO_CHAR(ADD_MONTHS(DT,(NVL(:P - 1,0))* -1),'YYYY'):P 用法同上 ---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman |
seedbcc
高階會員 發表:232 回覆:272 積分:105 註冊:2003-12-10 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |