2016-01-12 54 views
1

我需要能夠對包含數據的列進行計數,但不確定從哪裏開始。該表格是:計數包含數據的列

TargetID Jan Feb Mar Apr May  Months with data 
    1  33 Null 44  32 Null   3 
    2  Null 44  32  16 17   4 
    3  33 72  Null Null 14   3 

我只是不知道如何創建與數據月份列,並將不勝感激任何幫助。 感謝

+0

您正在使用哪種SQL?我猜在Access? –

回答

2

的一般方法在SQL做到這一點是使用CASE聲明:

select t.*, 
     ((case when jan is not null then 1 else 0 end) + 
     (case when feb is not null then 1 else 0 end) + 
     (case when mar is not null then 1 else 0 end) + 
     (case when apr is not null then 1 else 0 end) + 
     (case when may is not null then 1 else 0 end) 
     ) as MonthsWithData  
from t; 

這是標準的SQL,應在任何合理的數據庫。

注意:您的數據結構看起來很尷尬。一般來說,您希望每個目標和每個月都有一行,並且包含計數的單個列。非規範化的數據有時候非常有用,特別是對於最終用戶的報告,但通常情況下,最好將事物存儲爲「SQL」方式。

+1

打算補充我的答案 - 但正如Gordons所說。我會創建一個包含三個字段的表格 - TargetID,MonthName和MonthValue。 TargetID和MonthName將是一個複合主鍵,因此不能有多個同一個TargetID相同的月份。然後SQL將是'SELECT TargetID,COUNT(MonthValue)FROM Table3 GROUP BY TargetID'或甚至'SELECT TargetID,COUNT(MonthName)FROM Table3 WHERE NOT MonthValue IS NULL GROUP BY TargetID' –