Solved

Case statement to sum values - T-SQL

Posted on 2016-10-13
3
44 Views
Last Modified: 2016-10-13
I'm trying to write a case statement  that sums up values, but the one below is producing null values. What am I doing wrong? *In a nutshell, (NL * 3%) + (DP * 1%) + (PR) = NR.

 sum((case
  when METRIC_CD = ''NL'' then
  MTD_ACT * 0.03 else null end) +
  (case when METRIC_CD = ''DP'' then
  MTD_ACT * 0.01 else null end) +
  (case when METRIC_CD = ''PR'' then
  MTD_ACT * 1 else null end)) as NR

Below is the data  as it appears in the table:

METRIC_CD      MTD_ACT
NL                       1200
DP                         500
PR                      3150
DP                      2250
PR                        550
NL                    11000


Thank you for your tremendous assistance.
0
Comment
Question by:saved4use
3 Comments
 
LVL 20

Accepted Solution

by:
Russ Suter earned 450 total points
ID: 41842669
Instead of else null use else 0 (that's zero).

Adding 0 won't affect your total but adding NULL will yield a NULL result. Take the following examples:

SELECT 1 + 3 + 0 + 5 => returns 9

SELECT 1 + 3 + NULL + 5 => returns NULL

The same holds true for the SUM() function. A NULL value in the aggregate will yield NULL.
0
 
LVL 65

Assisted Solution

by:Jim Horn
Jim Horn earned 50 total points
ID: 41842678
Russ is correct, as NULL added to anything else will equal NULL.  And to make this a hell of a lot easier to read...
 SUM(CASE METRIC_CD 
   WHEN 'NL' THEN MTD_ACT * 0.03 
   WHEN 'DP' THEN MTD_ACT * 0.01 
   WHEN 'PR' THEN MTD_ACT * 1 ELSE 0 END) as NR

Open in new window

0
 

Expert Comment

by:mbazar
ID: 41842969
Try this

sum((case
  when METRIC_CD = ''NL'' then MTD_ACT * 0.03
  when METRIC_CD = ''DP'' then MTD_ACT * 0.01
  when METRIC_CD = ''PR'' then MTD_ACT * 1
  else 0 end)) as NR
0

Featured Post

6 Surprising Benefits of Threat Intelligence

All sorts of threat intelligence is available on the web. Intelligence you can learn from, and use to anticipate and prepare for future attacks.

Join & Write a Comment

This article describes how to use the timestamp of existing data in a database to allow Tableau to calculate the prior work day instead of relying on case statements or if statements to calculate the days of the week.
Ever needed a SQL 2008 Database replicated/mirrored/log shipped on another server but you can't take the downtime inflicted by initial snapshot or disconnect while T-logs are restored or mirror applied? You can use SQL Server Initialize from Backup…
This videos aims to give the viewer a basic demonstration of how a user can query current session information by using the SYS_CONTEXT function
Via a live example, show how to set up a backup for SQL Server using a Maintenance Plan and how to schedule the job into SQL Server Agent.

706 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

Need Help in Real-Time?

Connect with top rated Experts

12 Experts available now in Live!

Get 1:1 Help Now