Solved

Tiered commission calculation in SQL - How to calculate?

Posted on 2016-09-05
4
103 Views
Last Modified: 2016-09-06
I'm having the exact same problem as poster: tmyint had a few years back (a good few years)
View the original post and solution of poster: tmyint.

I trying to understand what the .01 in Scotts solution refers to, does any one know why in the CASE statement, inside the accepted solution he uses this "THEN .01"

I'll paste the exact code, in for quicker reference than the link

--create sample/test data
DROP TABLE commissions
CREATE TABLE commissions (
    tier TINYINT,
      flag TINYINT,
      lowValue DECIMAL(12, 2),
      highValue DECIMAL(12, 2),
      pct DECIMAL(3, 2)
      )
INSERT INTO commissions VALUES(0, 0,      0,     2147483647,  0.50) --default commission
INSERT INTO commissions VALUES(1, 1,      0,         100000,  0.50)
INSERT INTO commissions VALUES(2, 1, 100000.01,      250000,  0.55)
INSERT INTO commissions VALUES(3, 1, 250000.01,  2147483647,  0.60)

DROP TABLE revenues
CREATE TABLE revenues (
      empNum INT,
      gross DECIMAL(12, 2),      
      commissionFlag TINYINT
      )
INSERT INTO revenues VALUES(1111111, 300500, 1)
INSERT INTO revenues VALUES(2222222, 300500, 0)


SELECT rev.empNum, rev.gross, 
      SUM(CASE WHEN rev.gross > com.highValue 
               THEN com.highValue - com.lowValue + CASE WHEN com.lowValue <> 0 THEN .01 ELSE 0 END
               ELSE rev.gross - com.lowValue + CASE WHEN com.lowValue <> 0 THEN .01 ELSE 0 END END * com.pct) 
      AS [commission]
FROM revenues rev
INNER JOIN commissions com ON rev.commissionFlag = com.flag AND
      rev.gross >= com.lowValue
GROUP BY rev.empNum, rev.gross

Open in new window

0
Comment
Question by:fadiel ras
  • 2
  • 2
4 Comments
 
LVL 48

Expert Comment

by:PortletPaul
ID: 41785721
I believe Scott is adding up percentages.
I.e.
Sum (.01)
Results in the total percentage to apply


Quite crafty actually.
0
 

Author Comment

by:fadiel ras
ID: 41785727
Thanks Paul. I'm not exactly following, but let me check in more detail and revert asap
0
 
LVL 48

Accepted Solution

by:
PortletPaul earned 500 total points
ID: 41785734
Try runnning the query without the sum () or group by so that you get to see the generated rows before the sum is performed.

This should help you understandbthe logic.
0
 

Author Closing Comment

by:fadiel ras
ID: 41785871
Thanks Paul, I get it now, appreciate the fast response.
PS - I'm posting a related, but different question in a few minutes, hopefully you'll again be able to help, thank you
0

Featured Post

Live: Real-Time Solutions, Start Here

Receive instant 1:1 support from technology experts, using our real-time conversation and whiteboard interface. Your first 5 minutes are always free.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

How to leverage one TLS certificate to encrypt Microsoft SQL traffic and Remote Desktop Services, versus creating multiple tickets for the same server.
This article explains how to reset the password of the sa account on a Microsoft SQL Server.  The steps in this article work in SQL 2005, 2008, 2008 R2, 2012, 2014 and 2016.
Using examples as well as descriptions, and references to Books Online, show the documentation available for date manipulation functions and by using a select few of these functions, show how date based data can be manipulated with these functions.
This video shows how to set up a shell script to accept a positional parameter when called, pass that to a SQL script, accept the output from the statement back and then manipulate it in the Shell.

805 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question