Dönüştürmek için SQL IRS fonksiyonu gibi vergi

1 Cevap php

Bu vergi gibi IRS fonksiyonunu http://stackoverflow.com/questions/1817920/calculating-revenue-share-at-different-tiers SQL dönüştürmek için çalışıyor. Varsayım tablo bir sütun (fiyat) olacağını ve sıralar dinamik eklenecektir.

Benim ilk girişimi de işe yaramadı bazı harf ifadeleri vardır. O zamandan beri yardım için teşekkürler :) bunu hurdaya!

1 Cevap

SQL gerçekten yinelemeli döngüler için uygun değildir. Hissetmesem

select * from `brackets` where `tier` < $income

Oradan ben ... iyi, başka bir dilde kendinizi bazı örnek kod bağlantılı ediyorum. Eğer gerçekten bu şekilde yapmalıdır.

Eğer aksi ısrar ederseniz, SQL bunu yapabilirsiniz:

DELIMITER $$
create procedure `calcTax`(IN v_param1 int)

begin
declare v_tier int;
declare v_rate decimal(3,3);
declare v_untaxed int default 0;
declare v_taxTotal float default 0;

set v_untaxed = v_param1;
set v_taxTotal = 0;

while v_untaxed > 0 do
select max(`tier`), max(`rate`) into v_tier, v_rate
    from `brackets` where tier < v_untaxed order by `tier` desc limit 1;

set v_taxTotal = v_taxTotal + (v_untaxed - v_tier) * v_rate;
set v_untaxed = v_tier;
end while;

select v_taxTotal;
end;
$$

Doğru datatypes size kalmış. Dışarı çalışan bir vergi dilimleri tablo gerekir. Ben (kötü tavsiye veri türleri ile) aşağıda test için bir tane yaptım.

create table brackets (tier int primary key, rate float);
insert into brackets values (0, 0), (10000, 0.1), (50000, 0.2);