請教一個棘手的 SQL 語法 |
尚未結案
|
ju1977
一般會員 發表:9 回覆:9 積分:3 註冊:2002-07-16 發送簡訊給我 |
Table A(廠商基本資料)
廠商編號 廠商
A9001 浩宇
A9012 翰羚
B8910 志群 Table B(訂貨資料)
時間 廠商編號 數量
2004/9/2 10:00 A9001 91
2004/9/2 10:30 A9012 67
2004/9/2 14:30 B8910 100
2004/9/4 9:45 A9001 95
2004/9/4 11:30 A9012 77
2004/9/4 11:30 B8910 98
2004/9/7 8:25 A9001 90
2004/9/7 8:26 A9012 80
2004/9/7 13:50 B8910 95
2004/9/8 9:00 A9001 91
2004/9/8 13:30 A9012 77
2004/9/8 14:00 A9001 55 <組合成醬結果>
廠商 前一天訂購總量 前十天內訂購總量 前十天內數量第一大(時間) 前十天內數量第二大(時間) 前十天內數量第三大(時間)
浩宇 146 422 95(2004/9/4 9:45) 91(2004/9/2 10:00) 91(2004/9/8 9:00)
翰羚 77 301 80(2004/9/7 8:26) 77(2004/9/4 11:30) 77(2004/9/8 13:30)
志群 0 293 100(2004/9/2 14:30) 98(2004/9/4 11:30) 95(2004/9/7 13:50) 查詢時間以2004/9/9為依據
前一天:2004/9/8
前十天內:2004/8/30~2004/9/8
DataBase: Oracle 請幫幫忙解一下語法如何寫??
3Q~~~
|
Mickey
版主 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
|
likush
高階會員 發表:5 回覆:235 積分:103 註冊:2002-10-08 發送簡訊給我 |
小弟建議,有錯請指正
可考慮
select a.廠商,(select sum(數量) from tableB b where b.廠商=a.廠商 and 時間='2004/09/02') as '前一天訂購總量' from tableA a
之類的語法逹到需求,但如Mickey兄所言,該語法如果遇上資料量大時,查詢時間將相當可觀,故端看您的考慮來決定,至於要逹成你所要的結果,相信直接在程式上作控制應也可以。但以Mickey兄所言,直接以stored procedure 的方式,或借由產生暫存資料表的方式,來處理都可逹到。 =========================
讀萬卷書~不如來K.TOP走一遭
=========================
|
ko
資深會員 發表:28 回覆:785 積分:444 註冊:2002-08-14 發送簡訊給我 |
ju1977 你好:
一開始必須先提醒你,若是作業請自己先做好功課在發問唷!! 解法:
1.先寫出 搜尋各廠商id及名稱的sql語法
2.寫出前一天訂購總量 依照各廠 並 group by 過
3.前十天內訂購總量 依照各廠 並 group by 過
4.前十天內數量第一大(時間)
5.前十天內數量第二大(時間)
6.前十天內數量第三大(時間)
--------------------------------------------------
總結:
你會發現,除了4.5.6.是要搜尋2個欄位的其他都是一個
所以可以用
select 廠商id,廠商名稱,
B_COUNT=isnull((select SUN(數量) from B where b.date = 條件天數 1 and a.廠商id=b.廠商id),0),
BTEN_COUNT=isnull((select SUN(數量) from B where b.date between 條件天數-10 and 條件天數 and a.廠商id=b.廠商id),0)
from a group by
廠商id,廠商名稱 這樣可以得到1.2.3.的總和 至於 4.5.6. 請你動手吧!!
------
====================== 昏睡~ 不昏睡~ 不由昏睡~ |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |