日期:2014-05-18  浏览次数:20503 次

根據數值來拆分記錄.

需要將一條數據劃分為若干條記錄,
由於過帳每次上限金額為¥50,000,   故假設員工的月薪是¥58,000,   便需進行2次過帳,   即第一次是
¥50,000,   第二次是¥8,000   ,如果員工月薪是152000,剛進行四次過數,產生四條記錄,前三條記錄是
Y   50000,后一次記錄是2000   以此類推。
應該如何生成此記錄呢。。有什么好的方法..

如員工1   數值為15200     則就得到以下記錄.
empi         name       salary
1               liko       50000
1               liko       50000
1               liko       50000
1               liko       2000          

------解决方案--------------------
SQL code

-- with循环 m就是你要的数值
; with a as(
    select n='liko', m=5000, m1 = 15200-5000
    union all
    select n=a.n, m=(case when a.m1<5000 then a.m1 else 5000 end), m1=a.m1-5000 from a 
    where a.m1>=0
)
select * from a

------解决方案--------------------
递归方法
SQL code

DECLARE @_salary INT,@_limitSalary INT,@_n INT,@_i INT,@_reminder INT
SET @_salary=152000
SET @_limitSalary=50000
SET @_n=@_salary/@_limitSalary
SET @_reminder=@_salary%@_limitSalary
IF (@_n<=1) SET @_n=1
;WITH cte(empi,NAME,salary,n) 
AS 
(
    SELECT 1,'liko',@_salary,@_n
    UNION ALL
    SELECT empi,NAME,CASE WHEN n>1 THEN @_limitSalary ELSE salary END,n-1
    FROM cte
    WHERE n>0
    UNION ALL
    SELECT empi,NAME,@_reminder,n-1
    FROM cte
    WHERE n=0
)
SELECT * FROM cte WHERE salary<=50000