I’ve got a requirement to include rows when any 3 out of 7 available columns contain data for that row. Is there a best practice for doing something like that? The solution I came up with seems fine, just wondering if there is a more accepted pattern? See here for exact details. Below is the gist of what I am trying to accomplish did.
CREATE TABLE Customer(
FirstName varchar(50) NULL,
LastName varchar(50) NULL,
AddressLine1 varchar(100) NULL,
AddressLine2 varchar(100) NULL,
City varchar(50) NULL,
State char(3) NULL,
Country char(2) NULL)
Insert Into Customer Values('Bob', null, '', 'addr2', 'city', '', null)
Insert Into Customer Values('', '', '', '', '', '', '')
Insert Into Customer Values(null, null, null, null, null, null, null)
SELECT *
FROM Customer
WHERE (CASE WHEN IsNull(FirstName, '') = '' THEN 0 ELSE 1 END
+ CASE WHEN IsNull(LastName, '') = '' THEN 0 ELSE 1 END
+ CASE WHEN IsNull(AddressLine1, '') = '' THEN 0 ELSE 1 END
+ CASE WHEN IsNull(AddressLine2, '') = '' THEN 0 ELSE 1 END
+ CASE WHEN IsNull(City, '') = '' THEN 0 ELSE 1 END
+ CASE WHEN IsNull(State, '') = '' THEN 0 ELSE 1 END
+ CASE WHEN IsNull(Country, '') = '' THEN 0 ELSE 1 END)
>= 3
An alternative.