2016-11-17 121 views
0

enter image description here请参阅附件图片。用NULL替换空白单元格?

我查询看的“漏洞”我们然而,当不存在漏洞,我的查询,没有返回细胞,甚至没有NULLS多少百分比(请详见附图)

有什么办法我可以得到这个只显示NULL或“100%”而不是空白单元格?

这里是我的查询

select * 

from 

(select '100' - convert(decimal(5,2),(100 *   convert(float,CountBreach)/nullif(convert(float,CountNot),0))) AS '2 week target' 
from 

(select CancerBreach, COUNT(*) [CountBreach] from 
(

SELECT 

d.HospitalNumber , 


    CASE WHEN SUM(DATEDIFF(DD,ReceiptOfReferralDate, FirstAppointmentDate)-  FirstAppointmentWaitingTimeAdjusted) > 14 
THEN 'Breach' ELSE 'Not Breach' 
END AS CancerBreach 


    FROM [WH].[SCR].[Referral] R 
    LEFT OUTER JOIN WHREPORTING.LK.SpecialtyDivision S 
    ON CONVERT(Varchar(10),(R.SpecialtyCode)) = S.SpecialtyCode 
    LEFT JOIN WH.SCR.Demographic as d 
    on d.UniqueRecordId = R.DemographicUniqueRecordId 

    WHERE 
    R.FirstAppointmentOrganisationCode IN ('RM202', 'RM201') 
    AND PriorityTypeCode = '03' 
    AND FirstAppointmentDate BETWEEN '01 oct 2016' AND '14 oct 2016' 
    AND R.CancerTypeCode <> '16' 
    AND R.FirstAppointmentDate is not NULL 

    AND NewTumourSite IS NULL 
    and s.SpecialtyCode = '103' 
    GROUP BY 


d.HospitalNumber)f 

where CancerBreach = 'breach' 

group by CancerBreach) e, 


(select COUNT(*) [CountNot] from 

(

SELECT 

d.HospitalNumber , 


CASE WHEN SUM(DATEDIFF(DD,ReceiptOfReferralDate, FirstAppointmentDate)- FirstAppointmentWaitingTimeAdjusted) > 14 
THEN 'Breach' ELSE 'Not Breach' 
END AS CancerBreach 


    FROM [WH].[SCR].[Referral] R 
    LEFT OUTER JOIN WHREPORTING.LK.SpecialtyDivision S 
    ON CONVERT(Varchar(10),(R.SpecialtyCode)) = S.SpecialtyCode 
    LEFT JOIN WH.SCR.Demographic as d 
    on d.UniqueRecordId = R.DemographicUniqueRecordId 

    WHERE R.FirstAppointmentOrganisationCode IN ('RM202', 'RM201') 
    AND PriorityTypeCode = '03' 
    AND FirstAppointmentDate BETWEEN '01 oct 2016' AND '14 oct 2016' 
    AND R.CancerTypeCode <> '16' 
    AND R.FirstAppointmentDate is not NULL 

    AND NewTumourSite IS NULL 
    and s.SpecialtyCode = '103' 
    GROUP BY 


d.HospitalNumber)f 

where CancerBreach = 'Not breach' 

group by CancerBreach) d)e 

回答

0

你可以使用一个联盟与默认值和前1记录排序返回,e.g:

SELECT TOP 1 * 
FROM 
(
    SELECT '100'-CONVERT(DECIMAL(5, 2), (100 * CONVERT(FLOAT, CountBreach)/NULLIF(CONVERT(FLOAT, CountNot), 0))) AS '2 week target' 
    FROM 
    (
     SELECT CancerBreach, 
       COUNT(*) [CountBreach] 
     FROM 
     (
      SELECT d.HospitalNumber, 
        CASE 
         WHEN SUM(DATEDIFF(DD, ReceiptOfReferralDate, FirstAppointmentDate) - FirstAppointmentWaitingTimeAdjusted) > 14 
         THEN 'Breach' 
         ELSE 'Not Breach' 
        END AS CancerBreach 
      FROM [WH].[SCR].[Referral] R 
       LEFT OUTER JOIN WHREPORTING.LK.SpecialtyDivision S ON CONVERT(VARCHAR(10), (R.SpecialtyCode)) = S.SpecialtyCode 
       LEFT JOIN WH.SCR.Demographic AS d ON d.UniqueRecordId = R.DemographicUniqueRecordId 
      WHERE R.FirstAppointmentOrganisationCode IN('RM202', 'RM201') 
       AND PriorityTypeCode = '03' 
       AND FirstAppointmentDate BETWEEN '01 oct 2016' AND '14 oct 2016' 
       AND R.CancerTypeCode <> '16' 
       AND R.FirstAppointmentDate IS NOT NULL 
       AND NewTumourSite IS NULL 
       AND s.SpecialtyCode = '103' 
      GROUP BY d.HospitalNumber 
     ) f 
     WHERE CancerBreach = 'breach' 
     GROUP BY CancerBreach 
    ) e, 
    (
     SELECT COUNT(*) [CountNot] 
     FROM 
     (
      SELECT d.HospitalNumber, 
        CASE 
         WHEN SUM(DATEDIFF(DD, ReceiptOfReferralDate, FirstAppointmentDate) - FirstAppointmentWaitingTimeAdjusted) > 14 
         THEN 'Breach' 
         ELSE 'Not Breach' 
        END AS CancerBreach 
      FROM [WH].[SCR].[Referral] R 
       LEFT OUTER JOIN WHREPORTING.LK.SpecialtyDivision S ON CONVERT(VARCHAR(10), (R.SpecialtyCode)) = S.SpecialtyCode 
       LEFT JOIN WH.SCR.Demographic AS d ON d.UniqueRecordId = R.DemographicUniqueRecordId 
      WHERE R.FirstAppointmentOrganisationCode IN('RM202', 'RM201') 
       AND PriorityTypeCode = '03' 
       AND FirstAppointmentDate BETWEEN '01 oct 2016' AND '14 oct 2016' 
       AND R.CancerTypeCode <> '16' 
       AND R.FirstAppointmentDate IS NOT NULL 
       AND NewTumourSite IS NULL 
       AND s.SpecialtyCode = '103' 
      GROUP BY d.HospitalNumber 
     ) f 
     WHERE CancerBreach = 'Not breach' 
     GROUP BY CancerBreach 
    ) d 
    UNION SELECT 100 AS '2 week target' 
) e 
ORDER BY [2 week target] ASC; 
相关问题