我有一个查询,我正在计算治疗天数。我希望在没有数据的月份显示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
答案 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
条款 - 从结果集中消除了所有非头孢呋辛记录。