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

SQL グループと月ごとの合計 - デフォルトはゼロ

    過去に、必要なすべての日付を保持する一時テーブルを作成することで、このような問題を解決しました:

        CREATE TABLE #AllDates (ThisDate datetime null)
        SET @CurrentDate = @StartRange
    
        -- insert all dates into temp table
        WHILE @CurrentDate <=  @EndRange
            BEGIN
                INSERT INTO #AllDates values(@CurrentDate)
                SET @CurrentDate = dateadd(mm, 1, @CurrentDate)
            END
    

    次に、このテーブルに対して結合するようにクエリを変更します:

    SELECT      ALLItems.ItemId,
                SUM(COALESCE(Inventory.Qty, 0)) AS Individual_MonthQty,
                MONTH(#AllDates.ThisDate) AS Individual_MonthAsNumber,
                DATENAME(MONTH, #AllDates.ThisDate) AS Individual_MonthAsString
    FROM        #AllDates
                JOIN (SELECT DISTINCT dbo.Inventory.ItemId FROM dbo.Inventory)  AS ALLItems ON 1 = 1
                LEFT JOIN Inventory ON DATEADD(dd, - DAY(Inventory.dadded) +1, Inventory.dadded) = #AllDates.ThisDate AND ALLItems.ItemId = dbo.Inventory.ItemId
    WHERE       
                #AllDates.ThisDate >= @StartRange
    AND         #AllDates.ThisDate <= @EndRange
    GROUP BY    ALLItems.ItemId, 
                #AllDates.ThisDate
    

    次に、Inventory に存在するかどうかに関係なく、各月のレコードが必要です。



    1. 行ごとではなくMySQLでテーブル全体を保持するSELECTFORUPDATE

    2. PLS-00306:「OUTPUT_ARRAY」の呼び出しで引数の数またはタイプが正しくありません

    3. OracleParameterおよびIN句

    4. SQLServerとID列のギャップ