• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 317
  • Last Modified:

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

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
obb-taurus
Asked:
obb-taurus
1 Solution
 
barletCommented:
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
 
obb-taurusAuthor Commented:
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
 
dqmqCommented:
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
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
HainKurtSr. System AnalystCommented:
try something like this:

case when isnull(lastname,'')+', '+isnull(firstname,'')=', ' then companyname else isnull(lastname,'')+', '+isnull(firstname,'') end as name
0
 
dqmqCommented:
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
 
deightonCommented:
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
 
obb-taurusAuthor Commented:
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

Visualize your virtual and backup environments

Create well-organized and polished visualizations of your virtual and backup environments when planning VMware vSphere, Microsoft Hyper-V or Veeam deployments. It helps you to gain better visibility and valuable business insights.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now