I've been trying to get a count of a specific subset of a population based on a status ID (active) and a dependant type. Unfortunately, dependants are listed across multiple columns such as dependent 1, dependent 2, etc.
I tried to make use of a nested case statement and then summing the result:
select TOP (100) [Month],
[SCHEME CODE DESCRIPTION],
[MEMBER NUMBER],
Sum(CASE
WHEN ([DEPENDANT DEPENDANT- TYPE 2] in ('A','M','O','S') and [DEPENDANT STATUS 2] = 'Active')
THEN 1
WHEN ([DEPENDANT DEPENDANT- TYPE 3] in ('A','M','O','S') and [DEPENDANT STATUS 3] = 'Active')
THEN 1
WHEN ([DEPENDANT DEPENDANT- TYPE 4] in ('A','M','O','S') and [DEPENDANT STATUS 4] = 'Active')
THEN 1
WHEN ([DEPENDANT DEPENDANT- TYPE 5] in ('A','M','O','S') and [DEPENDANT STATUS 5] = 'Active')
THEN 1
WHEN ([DEPENDANT DEPENDANT- TYPE 6] in ('A','M','O','S') and [DEPENDANT STATUS 6] = 'Active')
THEN 1
WHEN ([DEPENDANT DEPENDANT- TYPE 7] in ('A','M','O','S') and [DEPENDANT STATUS 7] = 'Active')
THEN 1
WHEN ([DEPENDANT DEPENDANT- TYPE 8] in ('A','M','O','S') and [DEPENDANT STATUS 8] = 'Active')
THEN 1
WHEN ([DEPENDANT DEPENDANT- TYPE 9] in ('A','M','O','S') and [DEPENDANT STATUS 9] = 'Active')
THEN 1
WHEN ([DEPENDANT DEPENDANT- TYPE 10] in ('A','M','O','S') and [DEPENDANT STATUS 10] = 'Active')
THEN 1
WHEN ([DEPENDANT DEPENDANT- TYPE 11] in ('A','M','O','S') and [DEPENDANT STATUS 11] = 'Active')
THEN 1
WHEN ([DEPENDANT DEPENDANT- TYPE 12] in ('A','M','O','S') and [DEPENDANT STATUS 12] = 'Active')
THEN 1
WHEN ([DEPENDANT DEPENDANT- TYPE 13] in ('A','M','O','S') and [DEPENDANT STATUS 13] = 'Active')
THEN 1
WHEN ([DEPENDANT DEPENDANT- TYPE 14] in ('A','M','O','S') and [DEPENDANT STATUS 14] = 'Active')
THEN 1
WHEN ([DEPENDANT DEPENDANT- TYPE 15] in ('A','M','O','S') and [DEPENDANT STATUS 15] = 'Active')
THEN 1
WHEN ([DEPENDANT DEPENDANT- TYPE 16] in ('A','M','O','S') and [DEPENDANT STATUS 16] = 'Active')
THEN 1
ELSE 0
END) as NUM_ADULT_DEP
from [PROFMED].[dbo].[Members_Data]
group by [Month],
[SCHEME CODE DESCRIPTION],
[MEMBER NUMBER]
order by NUM_ADULT_DEP desc
;
The results returned is not correct as the it isn't doing the sum across the columns.
Data example:
Please assist :)
I believe you're trying to do this (basically I have broken down your one big case statement into fifteen and added them):
SUM(
CASE WHEN [DEPENDANT DEPENDANT- TYPE 2] IN ('A','M','O','S') AND [DEPENDANT STATUS 2] = 'Active' THEN 1 ELSE 0 END
+ CASE WHEN [DEPENDANT DEPENDANT- TYPE 3] IN ('A','M','O','S') AND [DEPENDANT STATUS 3] = 'Active' THEN 1 ELSE 0 END
+ CASE WHEN [DEPENDANT DEPENDANT- TYPE 4] IN ('A','M','O','S') AND [DEPENDANT STATUS 4] = 'Active' THEN 1 ELSE 0 END
+ CASE WHEN [DEPENDANT DEPENDANT- TYPE 5] IN ('A','M','O','S') AND [DEPENDANT STATUS 5] = 'Active' THEN 1 ELSE 0 END
+ CASE WHEN [DEPENDANT DEPENDANT- TYPE 6] IN ('A','M','O','S') AND [DEPENDANT STATUS 6] = 'Active' THEN 1 ELSE 0 END
+ CASE WHEN [DEPENDANT DEPENDANT- TYPE 7] IN ('A','M','O','S') AND [DEPENDANT STATUS 7] = 'Active' THEN 1 ELSE 0 END
+ CASE WHEN [DEPENDANT DEPENDANT- TYPE 8] IN ('A','M','O','S') AND [DEPENDANT STATUS 8] = 'Active' THEN 1 ELSE 0 END
+ CASE WHEN [DEPENDANT DEPENDANT- TYPE 9] IN ('A','M','O','S') AND [DEPENDANT STATUS 9] = 'Active' THEN 1 ELSE 0 END
+ CASE WHEN [DEPENDANT DEPENDANT- TYPE 10] IN ('A','M','O','S') AND [DEPENDANT STATUS 10] = 'Active' THEN 1 ELSE 0 END
+ CASE WHEN [DEPENDANT DEPENDANT- TYPE 11] IN ('A','M','O','S') AND [DEPENDANT STATUS 11] = 'Active' THEN 1 ELSE 0 END
+ CASE WHEN [DEPENDANT DEPENDANT- TYPE 12] IN ('A','M','O','S') AND [DEPENDANT STATUS 12] = 'Active' THEN 1 ELSE 0 END
+ CASE WHEN [DEPENDANT DEPENDANT- TYPE 13] IN ('A','M','O','S') AND [DEPENDANT STATUS 13] = 'Active' THEN 1 ELSE 0 END
+ CASE WHEN [DEPENDANT DEPENDANT- TYPE 14] IN ('A','M','O','S') AND [DEPENDANT STATUS 14] = 'Active' THEN 1 ELSE 0 END
+ CASE WHEN [DEPENDANT DEPENDANT- TYPE 15] IN ('A','M','O','S') AND [DEPENDANT STATUS 15] = 'Active' THEN 1 ELSE 0 END
+ CASE WHEN [DEPENDANT DEPENDANT- TYPE 16] IN ('A','M','O','S') AND [DEPENDANT STATUS 16] = 'Active' THEN 1 ELSE 0 END
) AS NUM_ADULT_DEP
Having said that, it is a poor database design. You should create a separate table for dependents.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.