繁体   English   中英

替换SQL中的空白单元格?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM