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

一個棘手的 SQL 分析語法

答題得分者是:yachanga
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-04-13 22:07:05 IP:61.71.xxx.xxx 未訂閱
請問各位!    我有一個需求想以一次SQL語法找出符合的記錄, 苦思數日不得其解, 請各位協助, 謝謝!    
編號 細目   進量  銷量
001  001-1   10    10
001  001-2   10     9
001  001-3   10     9
001  001-4   10     7
001  001-4   10     6
002  002-1    5     1
002  002-2    5     2
002  002-3    5     4 
...
...
我要從上述的記錄中挑選出該編號的銷售率>=8成以上的記錄同時顯示在畫面 如下(不是細目的個別量, 而是編號的合計量)
001 50  41 82%
我用sql下 select ITEMNO, ITEMNO1 from Table1 where SALECOUNT >= INCOUT*0.8 找到如下記錄
001  001-1   10    10
001  001-2   10     9
001  001-3   10     9
002  002-3    5     4 
並不符合我要的記錄(002不應該出來), 換句話說, 我希望透過sql可以直接先把 001, 002 .. 的 INCOUNT, SALECOUNT 統計後再做計算 那這樣的SQL語法, 有沒有可能一次就可以解決的? 註:我使用的資料庫為 FireBird 1.5 版 發表人 - P.D. 於 2004/04/13 22:09:42
yachanga
資深會員


發表:24
回覆:335
積分:296
註冊:2003-09-27

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-04-13 22:30:20 IP:61.230.xxx.xxx 未訂閱
P.D. 大大您好    以下是我的想法 不知道FireBird能不能用? 單筆==> SELECT *  FROM Table1 where ITEM_NO IN( SELECT ITEMNO  FROM TABLE1  GROUP BY ITEMNO  HAVING SUM(SALE)>=SUM(IN)*0.8 )    總合=> SELECT ITEMNO,SUM(IN),SUM(SALE),(SUM(SALE)/SUM(IN))*100   FROM Table1  GROUP BY ITEMNO  HAVING SUM(SALE)>=SUM(IN)*0.8    ~悠遊法國號~ 發表人 - yachanga 於 2004/04/13 23:05:25
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-04-13 22:47:14 IP:218.32.xxx.xxx 未訂閱
FireBird 我沒用過. 試試 SELECT ITEMNO,SUM(INCOUT),SUM(SALECOUNT),AVG(SALECOUNT/INCOUT)*100 FROM TABLE1 GROUP BY ITEM HAVING AVG(SALECOUNT/INCOUT)*100>80
No-where
一般會員


發表:31
回覆:53
積分:16
註冊:2002-09-05

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-04-13 23:00:34 IP:218.172.xxx.xxx 未訂閱
SELECT ItemNo,sum(In),sum(Sales),(sum(Sales)/sum(In))*100 FROM Table GROUP BY ItemNo HAVING (sum(Sales)/sum(In))*100 > 80
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-04-13 23:32:28 IP:61.71.xxx.xxx 未訂閱
十分感謝兩位的回覆, 不過兩位的語法都剛好解決一半, 我列出測試成功的結果 select ITEMNO sum(INCOUNT), sum(SLCOUNT), avg(SLCOUNT/INCOUNT)*100 from D2001 where LAST_SDATE>= :iDATE and ITEMNO in (select ITEMNO from TABLE1 where LAST_SDATE>= :iDATE group by ITEMNO having sum(SLCOUNT)>=sum(INCOUNT)*0.8) group by ITEMNO 之所以最後會加上group by 是因為我只要取出一筆相同itemno, 以yachanga的語法, 在 IB上可以運行無誤, 但會取出所有的ITEMNO, 另外無法顯示出INCOUNT, SLCOUNT 的SUM值及銷售率值 以Mickey版主的語法, 在 IB上運作有問題, 會出現 INVALUE COLUMN REFERUNCE...的錯誤 但在 SELECT 後的語法確是我想要的寫法, 所以把兩位的指導合併後就出現 上面我真正要的結果, 由於yachanga的語法可以運行, 所以我把這份獎勵給 yachanga, 但也很感謝Mickey版主!
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-04-13 23:35:34 IP:61.71.xxx.xxx 未訂閱
引言: SELECT ItemNo,sum(In),sum(Sales),(sum(Sales)/sum(In))*100 FROM Table GROUP BY ItemNo HAVING (sum(Sales)/sum(In))*100 > 80
謝謝! 我回完才看到No-where妹妹的回答, 不要氣餒, 我給你加油~~~
系統時間:2024-07-03 3:25:32
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!