T-SQL Query不会为Sum返回0值

时间:2017-01-30 23:26:14

标签: sql sql-server tsql

我有一个查询,我正在计算治疗天数。我希望在没有数据的月份显示0值。如果Sum为0,则当前查询不返回任何记录。似乎无法弄清楚这一点。请参阅下面的查询:

如果我要注释掉与DOT_ALL表相关的标识符以及Where子句我得到60行,过去5年每个月1。但是,由于2016年8月,2016年4月和2015年1月没有DOT,因此我在Where子句中只获得了57种药物。

提前致谢。

----------------------------------------------------------------------------

SELECT
    AMS.[Medication Name]
    , SUM(AMS.DOT) AS DOT
    ,  PD.[Patient Days]
    , PD.[Month_Name]
    , PD.[Fiscal_Month]
    , PD.[Accounting_Year]
    , PD.[Year]

FROM
    DW_PROD.dbo.Patient_Days_By_Month PD 
    Left JOIN [DW_PROD].[dbo].[DOTS_All] AMS ON (PD.Month_Name = AMS.Month AND PD.Year = AMS.Year)

WHERE
    [Medication Name] = 'CEFUROXIME'

GROUP BY
    AMS.[Medication Name]
    , PD.[Patient Days]
    , PD.[Month_Name]
    , PD.[Fiscal_Month]
    , PD.[Accounting_Year]
    , PD.[Year]

ORDER BY
    ACCOUNTING_YEAR
    ,FISCAL_MONTH

1 个答案:

答案 0 :(得分:2)

这可能是最便宜的解决方案,假设Patient_Days_By_Month已经是某种日历。

SELECT
    'CEFUROXIME' AS [Medication Name],
    SUM(AMS.DOT) AS DOT,
    PD.[Patient Days],
    PD.[Month_Name],
    PD.[Fiscal_Month],
    PD.[Accounting_Year],
    PD.[Year]
FROM DW_PROD.dbo.Patient_Days_By_Month PD 
LEFT JOIN [DW_PROD].[dbo].[DOTS_All] AMS 
    ON PD.Month_Name = AMS.Month 
    AND PD.Year = AMS.Year
    AND [Medication Name] = 'CEFUROXIME'
GROUP BY
    PD.[Patient Days],
    PD.[Month_Name],
    PD.[Fiscal_Month],
    PD.[Accounting_Year],
    PD.[Year]
ORDER BY
    PD.ACCOUNTING_YEAR,
    PD.FISCAL_MONTH

JOIN条件不需要引用其他表中的列,它们也可以contain constants

药物名称最初受限于WHERE条款 - 从结果集中消除了所有非头孢呋辛记录。