2017-01-30 4 views
0

ために0値を返しません。データがない月には0の値を表示したい。合計は0がこれを把握することができないようであれば、現在のクエリにはレコードを返しません。以下は、クエリを参照してください:T-SQLクエリは、私は薬の治療の日数を計算していたクエリを持つ和

私は、過去5年間の各月の60行、1を得るWhere句とともにDOT_ALLテーブルに関連した識別子をコメントアウトした場合。 2016年8月、2016年4月とJan 2015のためのドットが事前に

おかげで存在していないので、しかし、そうでない私は、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 

+2

'薬NAME'は' DOTS_All'(?)のカラムになり、それは 'WHERE'ので、全体結果セットを制限するにあります。代わりに追加の結合条件として追加してみてください。 – dlatikay

+0

潜在的なdup:http://stackoverflow.com/questions/14793057/how-to-include-zero-0-results-in-count-aggregate –

+1

日付(cte、サブクエリ、ハードコードされた、何でも)およびそれから両方のテーブルを結合したままにします。 – Malk

答えて

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 

は、彼らが同様contain constantsすることができ、条件が他のテーブルの列を参照する必要はありません登録しよう。

薬物名は、当初はWHERE節で制限されていましたが、結果セットからすべての非セフロキシム記録が削除されました。

関連する問題