一個棘手的 SQL 分析語法 |
答題得分者是:yachanga
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
請問各位! 我有一個需求想以一次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 發送簡訊給我 |
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 發送簡訊給我 |
|
No-where
一般會員 發表:31 回覆:53 積分:16 註冊:2002-09-05 發送簡訊給我 |
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
十分感謝兩位的回覆, 不過兩位的語法都剛好解決一半, 我列出測試成功的結果
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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |