[英]Replace blank cells in SQL?
由于某些原因,当它为0时,它不会说0甚至给出一个空值,它什么也不会返回(附有屏幕截图)
我怎样才能使它返回0呢? 有人可以解释为什么会这样吗?
select
cast(PatientClass as varchar) + ' - ' + cast([Counted] as varchar) [Procedures Split]
from
(select
PatientClass, COUNT(*) as [Counted]
from
(SELECT
NELCal.LastDayOfWeek, S.FaciltyID,
PP.EncounterRecno, PP.ProcedureSequence,
S.[AdmissionDate], S.AdmissionConsultantName, S.AdmissionMethod,
s.LengthOfSpell,
year(S.[AdmissionDate]) as AdmYear,
month(S.[AdmissionDate]) as AdmMonth,
PP.[ProcedureDate],
year(PP.[ProcedureDate]) as ProcYear,
month(PP.[ProcedureDate]) as ProcMonth,
S.Age, S.[AdmissionSpecialty(Function)],
S.[PatientClass], s.[AdmissionSpecialty(Main)],
PP.[ProcedureCode], PP.[Procedure]
FROM
[WHREPORTING].[APC].[Spell] S
LEFT JOIN
[WHREPORTING].[APC].[Episode] E ON S.SourceSpellNo = E.SourceSpellNo
LEFT JOIN
[WHREPORTING].[APC].[AllProcedures] PP ON E.EpisodeUniqueID = PP.EpisodeSourceUniqueID
LEFT JOIN
WHREPORTING.APC.Patient P ON P.EncounterRecno = S.EncounterRecno
JOIN
WHREPORTING.LK.Calendar AS NELCal ON PP.ProcedureDate = NELCal.TheDate
AND pp.ProcedureDate between '05 dec 2016' and '06 dec 2016'
--and NELCal.LastDayOfWeek between DATEADD(DAY,-7*52,cast(GETDATE() as DATE))
--and DATEADD(DAY,-1,cast(GETDATE() as DATE))
WHERE
[AdmissionSpecialty(Function)] = 'Breast Surgery') f
group by
PatientClass) g
您可以通过case
陈述来做到这一点
CASE WHEN yourfield = '' THEN 0 ELSE yourfield
如果根本没有返回记录,则可以执行此操作
IF NOT EXISTS(select
cast(PatientClass as varchar) + ' - ' + cast([Counted] as varchar) [Procedures Split]
from
(select
PatientClass, COUNT(*) as [Counted]
from
(SELECT
NELCal.LastDayOfWeek, S.FaciltyID,
PP.EncounterRecno, PP.ProcedureSequence,
S.[AdmissionDate], S.AdmissionConsultantName, S.AdmissionMethod,
s.LengthOfSpell,
year(S.[AdmissionDate]) as AdmYear,
month(S.[AdmissionDate]) as AdmMonth,
PP.[ProcedureDate],
year(PP.[ProcedureDate]) as ProcYear,
month(PP.[ProcedureDate]) as ProcMonth,
S.Age, S.[AdmissionSpecialty(Function)],
S.[PatientClass], s.[AdmissionSpecialty(Main)],
PP.[ProcedureCode], PP.[Procedure]
FROM
[WHREPORTING].[APC].[Spell] S
LEFT JOIN
[WHREPORTING].[APC].[Episode] E ON S.SourceSpellNo = E.SourceSpellNo
LEFT JOIN
[WHREPORTING].[APC].[AllProcedures] PP ON E.EpisodeUniqueID = PP.EpisodeSourceUniqueID
LEFT JOIN
WHREPORTING.APC.Patient P ON P.EncounterRecno = S.EncounterRecno
JOIN
WHREPORTING.LK.Calendar AS NELCal ON PP.ProcedureDate = NELCal.TheDate
AND pp.ProcedureDate between '05 dec 2016' and '06 dec 2016'
--and NELCal.LastDayOfWeek between DATEADD(DAY,-7*52,cast(GETDATE() as DATE))
--and DATEADD(DAY,-1,cast(GETDATE() as DATE))
WHERE
[AdmissionSpecialty(Function)] = 'Breast Surgery') f
group by
PatientClass) g)
SELECT 0 AS [Procedures Split]
ELSE
select
cast(PatientClass as varchar) + ' - ' + cast([Counted] as varchar) [Procedures Split]
from
(select
PatientClass, COUNT(*) as [Counted]
from
(SELECT
NELCal.LastDayOfWeek, S.FaciltyID,
PP.EncounterRecno, PP.ProcedureSequence,
S.[AdmissionDate], S.AdmissionConsultantName, S.AdmissionMethod,
s.LengthOfSpell,
year(S.[AdmissionDate]) as AdmYear,
month(S.[AdmissionDate]) as AdmMonth,
PP.[ProcedureDate],
year(PP.[ProcedureDate]) as ProcYear,
month(PP.[ProcedureDate]) as ProcMonth,
S.Age, S.[AdmissionSpecialty(Function)],
S.[PatientClass], s.[AdmissionSpecialty(Main)],
PP.[ProcedureCode], PP.[Procedure]
FROM
[WHREPORTING].[APC].[Spell] S
LEFT JOIN
[WHREPORTING].[APC].[Episode] E ON S.SourceSpellNo = E.SourceSpellNo
LEFT JOIN
[WHREPORTING].[APC].[AllProcedures] PP ON E.EpisodeUniqueID = PP.EpisodeSourceUniqueID
LEFT JOIN
WHREPORTING.APC.Patient P ON P.EncounterRecno = S.EncounterRecno
JOIN
WHREPORTING.LK.Calendar AS NELCal ON PP.ProcedureDate = NELCal.TheDate
AND pp.ProcedureDate between '05 dec 2016' and '06 dec 2016'
--and NELCal.LastDayOfWeek between DATEADD(DAY,-7*52,cast(GETDATE() as DATE))
--and DATEADD(DAY,-1,cast(GETDATE() as DATE))
WHERE
[AdmissionSpecialty(Function)] = 'Breast Surgery') f
group by
PatientClass) g
我猜您的子查询之一不返回任何记录。 这意味着您的结果集将完全为空(甚至不为null)。
如果结果为空,则不能使用字段(即您的强制转换语句)。 您需要先检查IF EXISTS ...
最简单的解决方案是像这样使用Coalesce函数:
select Coalesce(Table.Field,0) as columnResult
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.