问题描述
我写了下面的代码,期望在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)