2017-09-27 24 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