在[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)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...