線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1505
推到 Plurk!
推到 Facebook!

請教一個範圍判斷式SQL語法

尚未結案
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-07-12 21:25:49 IP:202.62.xxx.xxx 未訂閱
請教各位前輩﹕    作業環境﹕Delphi6 + Access資料庫形態 欄位說明﹕IDNO, NAME, SALARY, TAX SALARY欄位為個人薪資﹐TAX欄位為個人所得稅﹐但因政府要求﹐稅金報表需按如下要求設計﹕
IDNO  NAME  SALARY FREETAX  TAX(5%)  TAX(10%)  TAX(15%)  TAX(20%) TAX
======================================================================
0001  XIN   526205  200000  326205   0         0         0       16310
0002  YU    959649  200000  500000   259649                      50965
======================================================================
也就是說報表的顯示方法需要根据200000(不打稅)﹐200001~700000(打5%稅)﹐700001~1900000(打10%稅)﹐1900001~3700000(打15%稅)﹐3700001以上(打20%稅)這樣的原則﹐稅金欄位已經計算完成﹐但在報表制作時該如何下SQL語法才能達到以上的顯示結果﹒ 薪資範圍和稅金比例已在另一個資料表建立﹐可通過另一個資料表直接取得﹒ 小弟以前的做法是將每個人的薪資和各稅金比例用SQL語法新增一個Table﹐然后再從這個Table中取出﹐但因資料筆數較多﹐在效率上明顯下降﹐故想請教是否有直接的SQL語法可查詢出這樣的結果﹒ 感謝各位﹗ ================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
------
忻晟
chateau_frank
一般會員


發表:20
回覆:32
積分:10
註冊:2005-07-07

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-07-12 23:58:54 IP:218.161.xxx.xxx 未訂閱
IDNO  NAME  SALARY FREETAX  TAX(5%)  TAX(10%)  TAX(15%)  TAX(20%) TAX ====================================================================== 0001  XIN   526205  200000  326205   0         0         0       16310 0002  YU    959649  200000  500000   259649                      50965 ======================================================================    小弟建議 用迴圈跑每個人的薪資計算sql,然後在放入時只要小於零的欄位都等於零。 select idno, name, salary, freetax, sum(salary-20000) as tax5, sum(salary-70000) as tax10, sum(salary-190000) as tax15, sum(salary-370000) as tax20 , tax from salarytable    各欄位放進列表的過程中判斷.... if tax5 < 0 then tax5 = 0 end    if tax10< 0 then tax10 = 0 end 依此類推.....    由於另一個table的欄位不知為何,小弟先以您提出的表來假設另一個table的攔位,若回答錯誤請多原諒    
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-07-13 09:57:21 IP:210.65.xxx.xxx 未訂閱
Hi cashxin2002 版大,    大致如下:
TRANSFORM SUM(TAXDIST) AS SUMOFAMOUNT
SELECT  IDNO,
        NAME,
        SALARY,
        TAX
FROM   (SELECT  S.ID AS SID,
                S.IDNO,
                S.NAME,
                S.SALARY,
                S.TAX,
                T.ID AS TID,
                T.TAXNAME,
                T.TAXRATE,
                IIF(S.SALARY > T.MINSALARY,IIF(S.SALARY >= T.MAXSALARY,T.MAXSALARY - T.MINSALARY,S.SALARY-T.MINSALARY),0) AS TAXDIST
        FROM    TAX     T,
                SALARY  S) C
GROUP BY
        IDNO,
        NAME,
        SALARY,
        TAX
PIVOT FORMAT(SID,TID)
執行結果請見以下連結: http://delphi.ktop.com.tw/loadfile.php?TOPICID=23432445&CC=524055 ---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-07-18 08:48:40 IP:202.62.xxx.xxx 未訂閱
Fishman兄﹕    感謝支援指教﹐SQL功力深厚﹐甚感敬佩﹗ 同時也感謝chateau_frank的指點﹒    ================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
------
忻晟
系統時間:2024-05-09 15:47:08
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!