回答

收藏

SQL按月求和-默认为零

技术问答 技术问答 107 人阅读 | 0 人回复 | 2023-09-13

目前,我正按月分组总结库存使用情况:! S& G0 b1 U' u
SELECT      Inventory.itemid AS ItemID,           SUM(Inventory.Totalunits) AS Individual_MonthQty,           MONTH(Inventory.dadded) AS Individual_MonthAsNumber,           DATENAME(MONTH,Inventory.dadded) AS Individual_MonthAsStringFROM        InventoryWHERE       Inventory.invtype = 'Shipment'AND         Inventory.dadded >= @StartRangeAND         Inventory.dadded 这给了我预期的结果:
( |8 |( s$ r) z" K7 j* p, pItemID  Kit_MonthQty    Kit_MonthAsNumber   Kit_MonthAsString131888  234                                                                                                                                                                                                                                August131888  455                                                                                                                                                                                                                                September131888   61                                                                                                                                                                                                                                                                                 October131888  20                                                                                                                                                                                                                                                                                                                                                                                                   December问题8 C" X2 ~5 j& e, x. X
在没有数据的月份,我该怎么办才能回到     ,如下:" Y* c" R2 ~1 r& |+ D8 n# X
ItemID  Kit_MonthQty    Kit_MonthAsNumber   Kit_MonthAsString131888                               January131888                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  February13188   0               3                   March131888                                                                                                                          April131888                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  May131888                                                                                                                           June131888                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  July131888  234                                                                                                                                                                                                                                August131888  455                                                                                                                                                                                                                                September131888   61                                                                                                                                                                                                                                                                                 October131888                                                                                                                                                                                                                                                                    November131888  20                                                                                                                                                                                                                                                                                                                                                                                                   December               
0 i7 a2 J9 }$ ~2 ?7 N    解决方案:                                                               
4 P: _- Z$ o9 I: i5 U, v% x                                                                在过去,我通过创建一个临时表来解决这个问题,它将保存所有所需的日期:6 ~. ]5 E1 J9 m2 o. m
                CREATE TABLE #AllDates (ThisDate datetime null)    SET @CurrentDate = @StartRange    -- insert all dates into temp table    WHILE @CurrentDate 然后修改查询以连接表:# C" j! k2 j7 D6 z: g: O
SELECT      ALLItems.ItemId,           SUM(COALESCE(Inventory.Qty,0)) AS Individual_MonthQty,           MONTH(#AllDates.ThisDate) AS Individual_MonthAsNumber,           DATENAME(MONTH,#AllDates.ThisDate) AS Individual_MonthAsStringFROM        #AllDates            JOIN (SELECT DISTINCT dbo.Inventory.ItemId FROM dbo.Inventory)  AS ALLItems ON 1 =            LEFT JOIN Inventory ON DATEADD(dd,- DAY(Inventory.dadded)  1,Inventory.dadded) = #AllDates.ThisDate AND ALLItems.ItemId = dbo.Inventory.ItemIdWHERE                   #AllDates.ThisDate >= @StartRangeAND         #AllDates.ThisDate 然后,无论库存中是否有记录,你都应该有每月的记录。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则