Solved

Case statement to sum values - T-SQL

Posted on 2016-10-13
3
66 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

Microsoft Certification Exam 74-409

VeeamĀ® is happy to provide the Microsoft community with a study guide prepared by MVP and MCT, Orin Thomas. This guide will take you through each of the exam objectives, helping you to prepare for and pass the examination.

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.
Load balancing is the method of dividing the total amount of work performed by one computer between two or more computers. Its aim is to get more work done in the same amount of time, ensuring that all the users get served faster.
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.
Via a live example, show how to setup several different housekeeping processes for a SQL Server.

803 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