sql >> データベース >  >> RDS >> Sqlserver

ssrsチャートのSQLクエリ式で存在しない値を処理する

    上記の回答のように、外部結合とある種のカレンダーテーブルが必要になります。これはテストされていませんが、うまくいくと思います:

    with dateCTE as
    (
         select cast('2012-01-01' as datetime) dateValue -- start date
         union all
         select DateAdd(mm, 1, dateValue)
         from    dateCTE   
         where   dateValue < '2012-12-30' -- end date
     )
    SELECT
    MONTH(dateCTE.dateValue) AS 'MONTH',
    COUNT(CASE WHEN @Worker_ID1 IS NULL OR @Worker_ID1 = Worker.ID THEN 1 END) AS 'Worker1',
    COUNT(CASE WHEN @Worker_ID2 IS NULL OR @Worker_ID2 = Worker.ID THEN 1 END) AS 'Worker2',
    COUNT(CASE WHEN @Worker_ID3 IS NULL OR @Worker_ID3 = Worker.ID THEN 1 END) AS 'Worker3',
    COUNT(CASE WHEN @Worker_ID4 IS NULL OR @Worker_ID4 = Worker.ID THEN 1 END) AS 'Worker4',
    COUNT(CASE WHEN @Worker_ID5 IS NULL OR @Worker_ID5 = Worker.ID THEN 1 END) AS 'Worker5'
    
    FROM dateCTE
    LEFT JOIN Ord on MONTH(dateCTE.datevalue) = MONTH(Ord.OrdDate)
    JOIN Prod ON Ord.Prod_ID = Prod.ID
    JOIN ProdType ON Prod.ProdType_ID = ProdType.ID
    JOIN Groupord ON Ord.Groupord_ID = Groupord.ID
    JOIN Worker ON Groupord.Worker_ID = Worker.ID
    
    WHERE (@Year = YEAR(Ord.OrdDate) or ORD.prod_id is null)
    AND (@DrugType_ID IS NULL OR @ProdType_ID = ProdType.ID)
    
    GROUP BY MONTH(dateCTE.dateValue)
    OPTION  (MAXRECURSION 0)
    


    1. PythonからのOracleDBの接続タイムアウトパラメータ

    2. 親行を削除または更新できませんConstraintViolationException

    3. ルート権限を取得されていないAndroidデバイスでデータベースを確認する方法

    4. MySQLにリモートで接続する