SQL

T-SQL IIF

DecisionsRecently, I’ve decided to try to catch up on some things that were “snuck” into SQL Server while I wasn’t paying attention. The first post in this series was about TRY_CONVERT() (which is awesome) and today I want to talk about IIF().

I can’t imagine that there is a single beginner who has written any appreciable amount of SQL queries who at some point didn’t have to Google “how to do an if statement in sql” or ask someone with a little more experience. I certainly know that I had to do that. What you end up with is the CASE statement.

Let’s create a table to work with and populate it with some data.

USE tempdb
GO

IF OBJECT_ID('Customer') IS NULL
BEGIN
	CREATE TABLE dbo.Customer (
		CustomerId INT IDENTITY(1,1) PRIMARY KEY CLUSTERED,
		Name NVARCHAR(100) NOT NULL,
		CreditLimit MONEY NOT NULL,
		Active BIT NOT NULL		
	);

	INSERT dbo.Customer (Name, CreditLimit, Active)
	SELECT 'Nike', 10000000.00, 1
	UNION
	SELECT 'Under Armor', 5000000.00, 1
	UNION
	SELECT 'Reebok', 1000000.00, 1
	UNION
	SELECT 'Buster Brown', 10000.00, 0
END
GO

If we select out all of the data from the table now, it should look like this:

Customer Table Data

So, if we were to run a standard CASE statement against the table, it might look something like this. This statement returns the name of all of the customers along with their “Credit Status”. If a credit limit is greater than 1,000,000, then they are Preferred. Otherwise, they are Standard.

SELECT Name, CASE WHEN CreditLimit > 1000000.00 THEN 'Preferred' ELSE 'Standard' END AS CreditStatus
FROM dbo.Customer

This returns the following results.

Results after CASE Statement

T-SQL finally has an if statement of sorts for use in SELECT statements (logical branching IFs have always existed… I used one in my table create script). Those of you with any kind of VBA background (Access, Excel Macros and Formulas, etc) are probably already familiar with IIF(), which stands for “Immediate IF”. The T-SQL version takes three parameters, just as the VBA version does. The first parameter is the conditional, the second is what will display if the conditional is true, and the third is what will display if the conditional is false. Here is that same Credit Status query rewritten to use IIF().

SELECT Name, IIF(CreditLimit > 1000000.00, 'Preferred', 'Standard') AS CreditStatus
FROM dbo.Customer

You can see that the results are the same and the query does look a little cleaner.

Results after IIF Statement

What if you want to do multiple “layers” of the conditional? Nested IIF statements! Take a look at this query:

SELECT Name, 
IIF(CreditLimit > 5000000.00, 'Platinum', 
	IIF(CreditLimit >= 1000000.00, 'Gold', 'Silver')) AS CreditStatus
FROM dbo.Customer

The equivalent CASE statement would look like this:

SELECT Name, 
CASE 
	WHEN CreditLimit > 5000000.00 THEN 'Platinum'
	WHEN CreditLimit >= 1000000.00 THEN 'Gold'
	ELSE 'Silver'
END AS CreditStatus
FROM dbo.Customer

Both of those return a result set like this:
Nested Conditional Results

So, those statements do the same thing. For complicated conditional logic (especially logic that requires 5 or more decisions), I’d much prefer the CASE statement. Nested IIFs gets pretty dirty once you get that far. However, that appears to be an entirely stylistic choice. If you have any strong preference one way or the other, comment and let me know how you feel and why.

Goals

Podcast Episode 50 – The Year(s) in Review

MissedI figured with the year coming to a close that I would take a look back at the goals that I made on this podcast at the beginning of the year. As I went to pull up that episode to find out what I had promised “exactly”, I found out a sad fact…. I made that episode in 2015! Soldiering on, I take a look at *those* goals and talk about what my goals are in 2017 and even if it is worthwhile to make goals if they are going to change. It all culminates in a little Wes Bos lovefest 😉


Links Mentioned in this Show:
Episode 31
Social Network Movie
Episode 33
Wes Bos’ React for Beginners Course
2 Keto Dudes Podcast
Wes Bos’ Site

You can also subscribe to the podcast at any of these places:
iTunes Link RSS Feed

Thanks to all the people who listen, and a special thanks to those who have rated me. I really appreciate it.

The episodes have been archived. Click Here to see the archive page.

SQL

T-SQL TRY_CONVERT()

SQL Server 2012I am a little behind the curve on this one. Starting in SQL Server 2012, Microsoft introduced the TRY_CONVERT() function. This function works the same way as the CONVERT() function, but if the convert doesn’t work, you get NULL instead of an error.

Let’s take a look at the old way:

SELECT CONVERT(INT, 'aaa')

This returns the message “Conversion failed when converting the varchar value ‘aaa’ to data type int.” If you are doing a CONVERT() on some column in a large dataset, this often can throw you while you try to sort out what went wrong. Enter TRY_CONVERT(). Here is the new syntax:

SELECT TRY_CONVERT(INT, 'aaa')

This just returns NULL and doesn’t error at all. In this case, you can easily provide a default value for the conversion by using ISNULL() or COALESCE()

SELECT ISNULL(TRY_CONVERT(INT, 'aaa'), 0)
-- OR
SELECT COALESCE(TRY_CONVERT(INT, 'aaa'), 0)

Pretty darn awesome and about time (well, even four years ago, it was about time!).

Podcasts

Podcast Episode 49 – Obviously

ObviouslyIn this episode, I take a look at one word that you might be using that is making you look like kind of a jerk. Did I just call you a jerk? Maybe a little, but honestly this episode is mostly about how I might have inadvertently been being a jerk for quite some time.

Links Mentioned in this Show:

The O-Word

Simple Programmer YouTube Channel

You can also subscribe to the podcast at any of these places:
iTunes Link RSS Feed

Thanks to all the people who listen, and a special thanks to those who have rated me. I really appreciate it.

The episodes have been archived. Click Here to see the archive page.

Book Reviews

Actionable Books

Actionable Books LogoI know from just about everywhere that people just aren’t that in to reading anymore. Even when people are consuming books, audio books are a growing segment. From recent data that I looked up, the median number of books consumed per year is just 5. Half the people in America consumed less than five books last year. I typically average around a book a week. Are they all code-related? No. They aren’t even all non-fiction. I read quite a bit of fiction as an outlet for my imagination, as I watch less and less TV every year. I know that I’m not typical, so I want to try to be a little pragmatic here.

I came across a site called Actionable Books. This site has a section called “Summaries” where you can read people’s “Actionable Summaries” of books. At the time that I’m writing this, there are summaries for “1005 Top Business Books”. The way that the site works is that people read the books and they summarize the gist of the book, called “The Golden Egg”. Then, they also find two “Gems” from the book (accompanied by quotes). Here is a link to the summary of Good to Great by Jim Collins, so you can check out what I mean.

For the vast majority of business books, this site is amazing. I’ve long been a critic of these “single shot” business books. Typically, the author will have an idea that is good for 2-3 chapters, tops. After that, he’s beating a dead horse to try to hit some word count. For those kinds of books, Actionable Books is perfect. They’ll distill it down for you and you can get the idea without reading 200 pages of fluff.

For books that actually are full of value, you can read the summary and then – seeing the value – buy the whole thing. It is like a Book Review++++. So, if you are like me and like to read business books to build up your soft skills and business acumen, but don’t want to risk wasting your time with “low fat” books, check out Actionable Books.