MS SQL ile Gelir vergisi hesaplayan kullanıcı tanımlı scalar fonksiyon
Güncelleme: 5.044 defa okundu
Konu: SQL Fonksiyonları
İçindekiler
Ülkemizde gelir vergisi tarifesi artan tarifeli olup kümülatif kazanca göre ilgili vergi diliminden gelir vergi hesaplanmaktadır.
Eğer bu hesaplama işlemini database seviyesinde yapılması gerekirse aşağıdaki SQL için ile yazmış olduğum kullanıcı tanımlı fonksiyon ile Gelir Vergisi hesaplayabilirsiniz.
2026 dilimleriyle güncellendi.
Fonksiyondaki @DILIM2–@DILIM5 değerleri 2026 tarifesine göredir (190.000 / 400.000 / 1.500.000 / 5.300.000;
oranlar %15 / %20 / %27 / %35 / %40). Her yıl ocakta yeni tarifeye göre değiştirin:
Gelir vergisi dilimleri
Bu fonksiyon Kümülatif vergi matrahı ve Vergi matrahını parametre olarak alır. Sonuç olarak gelir vergisi döndürür.
SQL
- CREATE FUNCTION FN_GELIRVERGISI (@KMATRAH AS FLOAT,@VMATRAH AS FLOAT)
- RETURNS FLOAT AS
- BEGIN
- DECLARE @SONUC AS FLOAT
- DECLARE @DILIM1 AS FLOAT
- DECLARE @DILIM2 AS FLOAT
- DECLARE @DILIM3 AS FLOAT
- DECLARE @DILIM4 AS FLOAT
- DECLARE @DILIM5 AS FLOAT
- DECLARE @ORAN1 AS INT
- DECLARE @ORAN2 AS INT
- DECLARE @ORAN3 AS INT
- DECLARE @ORAN4 AS INT
- DECLARE @ORAN5 AS INT
- DECLARE @GV1 AS FLOAT
- DECLARE @GV2 AS FLOAT
- DECLARE @GV3 AS FLOAT
- DECLARE @GV4 AS FLOAT
- DECLARE @GV5 AS FLOAT
- DECLARE @TMATRAH AS FLOAT
- DECLARE @SOR AS FLOAT
- SET @DILIM1 = 0
- SET @DILIM2 = 190000
- SET @DILIM3 = 400000
- SET @DILIM4 = 1500000
- SET @DILIM5 = 5300000
- SET @ORAN1 =15
- SET @ORAN2 =20
- SET @ORAN3 =27
- SET @ORAN4 =35
- SET @ORAN5 =40
- SET @TMATRAH = @KMATRAH + @VMATRAH
- IF @KMATRAH>=@DILIM1 AND @KMATRAH<@DILIM2
- BEGIN
- SET @GV1=CASE WHEN @TMATRAH>=@DILIM1 AND @TMATRAH<@DILIM2 THEN @VMATRAH*@ORAN1/100 ELSE 0 END
- SET @GV2=CASE WHEN @TMATRAH>=@DILIM2 AND @TMATRAH<@DILIM3 THEN ((@DILIM2-@KMATRAH)*@ORAN1/100)+((@VMATRAH-(@DILIM2-@KMATRAH))*@ORAN2/100) ELSE 0 END
- SET @GV3=CASE WHEN @TMATRAH>=@DILIM3 AND @TMATRAH<@DILIM4 THEN ((@DILIM2-@KMATRAH)*@ORAN1/100)+((@DILIM3-@DILIM2)*@ORAN2/100)+((@VMATRAH-(@DILIM3-@KMATRAH))*@ORAN3/100) ELSE 0 END
- SET @GV4=CASE WHEN @TMATRAH>=@DILIM4 AND @TMATRAH<@DILIM5 THEN ((@DILIM2-@KMATRAH)*@ORAN1/100)+((@DILIM3-@DILIM2)*@ORAN2/100)+((@DILIM4-@DILIM3)*@ORAN3/100)+((@VMATRAH-(@DILIM4-@KMATRAH))*@ORAN4/100) ELSE 0 END
- SET @GV5=CASE WHEN @TMATRAH>=@DILIM5 THEN ((@DILIM2-@KMATRAH)*@ORAN1/100)+((@DILIM3-@DILIM2)*@ORAN2/100)+((@DILIM4-@DILIM3)*@ORAN3/100)+((@DILIM5-@DILIM4)*@ORAN4/100)+((@VMATRAH-(@DILIM5-@KMATRAH))*@ORAN5/100) ELSE 0 END
- SET @SONUC= @GV1+@GV2+@GV3+@GV4+@GV5
- END
- IF @KMATRAH>=@DILIM2 AND @KMATRAH<@DILIM3
- BEGIN
- SET @GV1=CASE WHEN @TMATRAH>=@DILIM2 AND @TMATRAH<@DILIM3 THEN @VMATRAH*@ORAN2/100 ELSE 0 END
- SET @GV2=CASE WHEN @TMATRAH>=@DILIM3 AND @TMATRAH<@DILIM4 THEN ((@DILIM3-@KMATRAH)*@ORAN2/100)+((@VMATRAH-(@DILIM3-@KMATRAH))*@ORAN3/100) ELSE 0 END
- SET @GV3=CASE WHEN @TMATRAH>=@DILIM4 AND @TMATRAH<@DILIM5 THEN ((@DILIM3-@KMATRAH)*@ORAN2/100)+((@DILIM4-@DILIM3)*@ORAN3/100)+((@VMATRAH-(@DILIM4-@KMATRAH))*@ORAN4/100) ELSE 0 END
- SET @GV4=CASE WHEN @TMATRAH>=@DILIM5 THEN ((@DILIM3-@KMATRAH)*@ORAN2/100)+((@DILIM4-@DILIM3)*@ORAN3/100)+((@DILIM5-@DILIM4)*@ORAN4/100)+((@VMATRAH-(@DILIM5-@KMATRAH))*@ORAN5/100) ELSE 0 END
- SET @SONUC= @GV1+@GV2+@GV3+@GV4
- END
- IF @KMATRAH>=@DILIM3 AND @KMATRAH<@DILIM4
- BEGIN
- SET @GV1=CASE WHEN @TMATRAH>=@DILIM3 AND @TMATRAH<@DILIM4 THEN @VMATRAH*@ORAN3/100 ELSE 0 END
- SET @GV2=CASE WHEN @TMATRAH>=@DILIM4 AND @TMATRAH<@DILIM5 THEN ((@DILIM4-@KMATRAH)*@ORAN3/100)+((@VMATRAH-(@DILIM4-@KMATRAH))*@ORAN4/100) ELSE 0 END
- SET @GV3=CASE WHEN @TMATRAH>=@DILIM5 THEN ((@DILIM4-@KMATRAH)*@ORAN3/100)+((@DILIM5-@DILIM4)*@ORAN4/100)+((@VMATRAH-(@DILIM5-@KMATRAH))*@ORAN5/100) ELSE 0 END
- SET @SONUC= @GV1+@GV2+@GV3
- END
- IF @KMATRAH>=@DILIM4 AND @KMATRAH<@DILIM5
- BEGIN
- SET @GV1=CASE WHEN @TMATRAH>=@DILIM4 AND @TMATRAH<@DILIM5 THEN @VMATRAH*@ORAN4/100 ELSE 0 END
- SET @GV2=CASE WHEN @TMATRAH>=@DILIM5 THEN ((@DILIM5-@KMATRAH)*@ORAN4/100)+((@VMATRAH-(@DILIM5-@KMATRAH))*@ORAN5/100) ELSE 0 END
- SET @SONUC= @GV1+@GV2
- END
- IF @KMATRAH>=@DILIM5
- BEGIN
- SET @GV1=CASE WHEN @TMATRAH>=@DILIM5 THEN @VMATRAH*@ORAN5/100 ELSE 0 END
- SET @SONUC= @GV1
- END
- RETURN @SONUC
- END
Fonksiyonun Kullanılışı :
Bu fonksiyon 2 parametre alır ve Gelir vergisi sonucunu verir.
SQL
- dbo.FN_GELIRVERGISI (Kümülatif Gelir Matrahı, Gelir Vergisi Matrahı)
- SELECT dbo.FN_GELIRVERGISI (10000,4000)
Sonuc : 600
Teşekkürler, geri bildiriminiz alındı.