Solved

How to select multiple columns and return the one which is not empty

Posted on 2012-04-09
7
301 Views
Last Modified: 2012-08-14
I'm working on a SQL query for an application and there are 3 fields, first, last and company name.  If the first and last name are empty then I want to return the company name and if the first and last name have data, I want to return that information.  I was originally using the following statement:

SELECT c.ID, coalesce (c.LastName + ', ' + c.FirstName, c.Company) AS Name
FROM Customer as c
ORDER BY LastName

I then realized when I commit data to the database from my application which is written in C#, it's not saving a Null value to the database when a field is blank so coalesce does not work for my purpose.  Is there a similar way to achieve the above query that works on empty strings?

Thanks
0
Comment
Question by:obb-taurus
7 Comments
 
LVL 7

Expert Comment

by:barlet
ID: 37825768
try to convert <empty_fields> to NULL with the following command
UPDATE your_Table
set [your_Column] = NULLIF([your_Column], '')

Open in new window

and then use coalesce?!
0
 

Author Comment

by:obb-taurus
ID: 37825803
Yes, that would work but if the data from my application but if the data is not being saved as NULl, I will have to run this update every time data is saved from my application which is not very efficient.  What I have come up with is as follows, not sure if this is a good way to accomplish what I'm trying to do.

SELECT c.ID,
CASE
   WHEN c.FirstName IS NULL AND c.LastName IS NULL
         THEN c.Company
   WHEN c.FirstName = '' AND c.LastName = ''
         THEN c.Company
         ELSE
             c.FirstName + ', ' + c.LastName
END
   AS Name
FROM Customer as c
ORDER BY LastName;
0
 
LVL 42

Expert Comment

by:dqmq
ID: 37825875
Not sure you got it quite right, i.e. what if only one of the names is an empty string.  Don't know what you want back in that case, but try this;

SELECT c.ID,
coalesce(nulllif(c.lastname+', '+c.firstname,', ')
         ,nullif(c.lastname,'')
         ,nullif(c.firstname,'')
         ,c.Company) AS Name
FROM Customer as c
ORDER BY LastName;
0
Master Your Team's Linux and Cloud Stack

Come see why top tech companies like Mailchimp and Media Temple use Linux Academy to build their employee training programs.

 
LVL 51

Expert Comment

by:HainKurt
ID: 37826023
try something like this:

case when isnull(lastname,'')+', '+isnull(firstname,'')=', ' then companyname else isnull(lastname,'')+', '+isnull(firstname,'') end as name
0
 
LVL 42

Accepted Solution

by:
dqmq earned 500 total points
ID: 37826359
Slight correction:

SELECT c.ID,
coalesce(nullif(c.lastname,'')+', '+nullif(c.firstname,'')
         ,nullif(c.lastname+c.firstname,'')
         ,c.Company) AS Name
FROM @tab as c
ORDER BY LastName;
0
 
LVL 18

Expert Comment

by:deighton
ID: 37826569
SELECT c.ID, CASE WHEN LEN(coalesce (c.LastName + ', ' + c.FirstName, c.Company)) > 0 THEN coalesce (c.LastName + ', ' + c.FirstName, c.Company) ELSE c.Company END  AS Name
FROM Customer as c
ORDER BY LastName
0
 

Author Closing Comment

by:obb-taurus
ID: 37829577
Thanks dqmq.
Also, I don't need to worry if first or last name is blank as the application doesn't allow only a first or last name to be entered, both are required.
0

Featured Post

What is SQL Server and how does it work?

The purpose of this paper is to provide you background on SQL Server. It’s your self-study guide for learning fundamentals. It includes both the history of SQL and its technical basics. Concepts and definitions will form the solid foundation of your future DBA expertise.

Question has a verified solution.

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

Suggested Solutions

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.
I have a large data set and a SSIS package. How can I load this file in multi threading?
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
Viewers will learn how to use the INSERT statement to insert data into their tables. It will also introduce the NULL statement, to show them what happens when no value is giving for any given column.

815 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

13 Experts available now in Live!

Get 1:1 Help Now