在[date]为NULL则为0 ELSE 1 END的情况下在我的数据透视表中不起作用

问题描述

我写了下面的代码,期望在CASES中返回0和1,但是我得到1和NULL。

有什么建议可以得到0?

DECLARE @Today DATETIME

SET @Today = FLOOR(CAST(GETDATE() AS FLOAT))

SELECT*

FROM 
    (   SELECT e.[Employeenr],e.[Name],dc.[Code],c.[Description],(CASE WHEN ec.[date] IS NULL THEN 0 ELSE 1 END) as 'Date',(CASE WHEN dc.[creationdate] IS NULL THEN 0 ELSE 1 END) as 'Aanwezig'
FROM HR_Employee e
        left join HR_EmployeeDriverLicense d ON e.[Employeenr] = d.[Employee]
        left join DriverLicenseCategory dc ON d.[DriverLicenseCategory] = dc. 
        [DriverLicenseCategorynr]
        left join HR_EmployeeCertificate ec ON e.[Employeenr] = ec.[Employee]
        left join HR_Certificate c ON ec.[Certificate] = c.[Certificatenr]
        left join HR_Function f ON e.[Function] = f.[Functionnr]

     WHERE (e.[Date_out_of_employment] IS NULL 
        or e.[Date_out_of_employment] >= @today 
        or e.[Licensenumber] is not null) 
        and e.[LicenseExpireDate] is not null 
        and c.[Description] is not null 
        and ec.[Certificate] <> 5 
        and f.[Functionnr] = 1

 ) AS SRC 
 PIVOT
 ( MAX(Aanwezig) 
  FOR [Code] IN ([C],[C1],[C1E],[CE])) AS Pivottable 

  PIVOT
 ( MAX ([Date]) 
    FOR [Description] IN ([Kooiaap certificaat],[ADR Certificaat])) AS Pivottable 

解决方法

执行PIVOT时,您将获得NULL的行,这些行没有对应的PIVOT列的值。不幸的是,如果要获取0而不是NULL,则需要在最后的SELECT语句中添加此逻辑。

类似这样的东西:

SELECT ISNULL([Kooiaap certificaat],0),ISNULL([ADR Certificaat],0)
,

一起使用MAX函数和COUNT来代替CASE WHEN

尝试以下。

COUNT(CASE WHEN AANWEZIG= 0 THEN NULL WHEN AANWEZIG= 1 THEN 1 END)