2017-09-27 57 views
0

我需要生成通过其雇主注册的healthclub会员数(每个会员有多个不同的雇主),他们的会员级别以及他们的家庭成员的级别。我遇到的问题是,目前我们没有任何LEVEL D会员,但可能在未来。当没有成员资格时,我需要报告显示'0'。我试过SQL QUERY在使用COUNT时显示NULL值

COUNT(DISTINCT CUSTOMER_ID) + 
    COUNT(CASE WHEN CUSTOMER_ID IS NULL THEN 1 END) AS NUMBER_OF_CUSTOMERS 

而且它没有工作,任何帮助表示赞赏。

SELECT 
    MEMBERSHIP_TYPE, 
    COUNT(DISTINCT CUSTOMER_ID) AS NUMBER_OF_CUSTOMERS, 
    COUNT(CASE WHEN CUSTOMER_RELATION = ‘FAMILYMEMBER’ THEN 1 END) AS FAMILY_MEMBERS, 
    COUNT(DISTINCT CUSTOMER_ID) + COUNT(CASE WHEN CUSTOMER_RELATION ‘FAMILY_MEMBERS’ THEN 1 END) AS TOTAL 

这是我目前得到

MEMBERSHIP_TYPE NUMBER_OF_CUSTOMERS FAMILY_MEMBERS TOTAL 
------------------------------------------------------------- 
LEVEL A     100     25   125 
LEVEL B     630     340   970 
LEVEL C    1201     630   1831 

我需要这个

MEMBERSHIP_TYPE NUMBER_OF_CUSTOMERS FAMILY_MEMBERS TOTAL 
------------------------------------------------------------- 
LEVEL A     100     25   125 
LEVEL B     630     340   970 
LEVEL C    1201     630   1831 
LEVEL D     0     0    0 
+0

由于某些原因,当我尝试发布表格时,格式会丢失,但这些列是MEMBERSHIP_TYPE,NUMBER_ OF_CUSTOMERS,FAMILY_MEMBERS和TOTAL。程度的不同的行是如下: 水平\t \t \t LEVEL乙\t \t \t C级\t \t \t LEVEL d – danielsvic

+0

是有水平的一个主表? –

回答

0

你会硬编码值入select语句。在SQL语句中添加UNION ALL

..your current select statement 
UNION 
SELECT LEVEL D, 0,0,0; 

当在表中创建级别D的条目时,更新后的值将正确显示。

+0

谢谢,我决定只使用D级标准运行查询,但没有出现,因此我开始注释where子句中的每一行,并在每次注释掉一行时运行查询。直到我找到关于成员term date = = GETDATE()的行,然后运行查询并获得了LEVEL D行,但是这些都是在今天之前终止的成员,并且我需要使用date来过滤掉其余成员的级别,以便被终止的成员不包括在计数中。所以这是我的新问题。 – danielsvic