2012-03-09 69 views
0

所以我有一個臨時表,我需要有應對擴招的歷史記錄來填充日期返回null而不是空值的MySQL

我有一個數據集,看起來像這樣的工作:

sccphidsid enroll_date disenroll_date status 
abc123x  2009-01-01 2010-31-12   0 
abc123x  2011-01-01 null     0 
abc123x  2011-03-01 2012-01-01   0 

所以我需要它用相同的sccphidsid返回所有記錄並返回它們,包括null和not null值。

它必須滿足的條件是

  • Disenroll日期不是空
  • Disenroll日期爲空,
  • 記錄有多個disenroll_dates

目前的解決方案:

select *, count(disenroll_date is null) 
       from enrollment _test 
       where Status = 0 
       group by Sub_Client_Cd, Policy_Holder_ID, Suffix_ID 
       having count(disenroll_date is null) > 1; 

然而,這返回的記錄太多了,有沒有辦法隔離這個查詢,也許更簡單,這可以防止它通過約束或參數返回太多的記錄?

感謝所有

+0

條件「Disenroll日期*不爲空*」和「Disenroll日期*爲空*」似乎並沒有有效.. – 2012-03-09 20:32:47

+0

我指的是disenroll日期是空的情況和該disenroll_date是非空有效日期...不是「不爲空」。 – Hituptony 2012-03-14 19:31:30

回答

1
SELECT Sub_Client_Cd, Policy_Holder_ID, Suffix_ID, 
     SUM(CASE WHEN disenroll_date IS NULL THEN 1 ELSE 0 END) AS NullDateCount, 
     SUM(CASE WHEN disenroll_date IS NOT NULL THEN 1 ELSE 0 END) AS NotNullDateCount 
    FROM enrollment_test 
    WHERE Status = 0 
    GROUP BY Sub_Client_Cd, Policy_Holder_ID, Suffix_ID 
    HAVING COUNT(*) > 1; 
1

其實這照顧了...謝謝反正。

select *, count(disenroll_date is null) from enrollment_test 
where Status = 0 
and disenroll_date is null 
group by Sub_Client_Cd, Policy_Holder_ID, Suffix_ID    
having count(disenroll_date is null) > 1;